2.为了能实时显示每个任务的运行状态,采用TabPage 及TabControl 控件。设计图如下:
添加四个控件:
private void treeView1_MouseUp(object sender, MouseEventArgs e)
{
try {
if (e.Button == MouseButtons.Left)
{
Point ClickPoint = new Point(e.X, e.Y);
TreeNode CurrentNode = treeView1.GetNodeAt(ClickPoint);
if (CurrentNode != null)//判断你点的是不是一个节点
{
treeView1.SelectedNode = CurrentNode;//选中这个节点
}
//如果是上层节点则展开之
if (treeView1.SelectedNode.Parent == null)
{
if (treeView1.SelectedNode.IsExpanded == false)
{
treeView1.SelectedNode.Expand();
}
}
else
{
//if (conn==null)
//{
// conn = Db.SqlConnection();
// if (conn==null)
// {
// MessageBox.Show("数据库链接失败,程序终止!");
// // return;
// }
//}
switch(CurrentNode.Index){
case 0:
addTabControl(CurrentNode.Text, CurrentNode.Text, tabControl1, new UserControl1(conn));
break;
case 1:
addTabControl(CurrentNode.Text, CurrentNode.Text, tabControl1, new UserControl2(conn));
break;
case 2:
addTabControl(CurrentNode.Text, CurrentNode.Text, tabControl1, new UserControl3(conn));
break;
case 3:
addTabControl(CurrentNode.Text, CurrentNode.Text, tabControl1, new UserControl4(conn));
break;
default:
break;
}
}
}
}
catch (Exception e3)
{
Console.WriteLine("错误信息:"+e3.Message);
MessageBox.Show("提交超时", "提示信息"+e3.Message);
}
}
然后,在文本框中实时显示任务信息:
public delegate void SetTextBoxValue(string value);
//委托使用文本框
void SetMyTextBoxValue(string value)
{
// Control.InvokeRequired 属性: 获取一个值,该值指示调用方在对控件进行方法调用时
//是否必须调用 Invoke 方法,因为调用方位于创建控件所在的线程以外的线程中。
//当前线程不是创建控件的线程时为true,当前线程中访问是False
try{
if (this.richTextBox1.InvokeRequired)
{
SetTextBoxValue objSetTextBoxValue = new SetTextBoxValue(SetMyTextBoxValue);
// IAsyncResult 接口:表示异步操作的状态。不同的异步操作需要不同的类型来描述,自然可以返回任何对象。
// Control.BeginInvoke 方法 (Delegate):在创建控件的基础句柄所在线程上异步执行指定委托。
IAsyncResult result = this.richTextBox1.BeginInvoke(objSetTextBoxValue, new object[] { value });
objSetTextBoxValue.EndInvoke(result);
}
else
{
//this.richTextBox1.Text += value + Environment.NewLine;
this.richTextBox1.Text += value + "\r\n";
this.richTextBox1.SelectionStart = this.richTextBox1.TextLength;
this.richTextBox1.ScrollToCaret();
}
}catch (Exception e)
{
Console.WriteLine("写文本出错原因:" + e.Message);
}
}
再添加滚动条,日期控件,界面基本就完成了。