ProgressBar控件和定时器
ProgressBar类里的Minimum设置最小值,Maximum设置最大值,这两个决定进程条值(Value)范围。
而Value表示进程条当前的值,也就是位置。
其中关于Minimum和Maximum怎么样去设置,没有多少规定,关键是看自己怎么看待。
比如,我可以设置Minimum为100,Maximum为200,那么Value设置为150的时候,进程条进度显示为一半。
ProgressBar还有个属性成员Step,这个属性跟PerformStep方法有关的,Step指定当执行一次PerformStep方法,Value值增加多少。
定时器
这里使用的是Forms命名空间里的Timer类来定时,关于定时器概念在MFC中也有,这里不说了。模式都是一样的,只是“形”不一样而已。
直接看代码吧,关键之处都有注释。
例子:(结合ProgressBar控件)
先设置好ProgressBar控件属性:
this.progressBar1.Minimum = 0;
this.progressBar1.Maximum = 255;
this.progressBar1.Value = 0;
this.progressBar1.Step = 10;
在Form1类里定义一个Timer类对象
//创建定时器
private System.Windows.Forms.Timer myTimer = new System.Windows.Forms.Timer();
然后:
//定义定时器处理函数
private void TimerEventProcessor(Object myObject, EventArgs myEventArgs)
{
//增加进度条的值,加载进度条
progressBar1.PerformStep();
//进度条加裁完成
if (progressBar1.Value >= 255)
{
myTimer.Stop();//停止定时
MessageBox.Show("完成!");
}
}
在按钮单击事件处理函数中开始定时:
private void button1_Click(object sender, EventArgs e)
{
//添加定时器处理函数
myTimer.Tick += new EventHandler(TimerEventProcessor);
//每300毫秒执行一次函数
myTimer.Interval = 300;
//开始定时
myTimer.Start();
}
运行效果:
TreeView树控件
TreeView类里的Nodes用于添加树控件的节点,调用Nodes.Add即可添加。看下例代码:
//新建一个节点
System.Windows.Forms.TreeNode node1 = new System.Windows.Forms.TreeNode("歌曲");
//下两个节点没有子节点,直接添加了
node1.Nodes.Add("和谐1");
node1.Nodes.Add("最心疼的人只有你");
//新建第二节点,属于node1节点下
System.Windows.Forms.TreeNode node2 = new System.Windows.Forms.TreeNode("经典歌曲");
//将“和谐2”添加到node2节点下
node2.Nodes.Add("和谐2");//如果想在node2添加一个有子项的节点,只需再新建添加
node1.Nodes.Add(node2);//将“经典歌曲”这个结点添加到node1("歌曲")这个节点下。
treeView1.Nodes.Add(node1);//将node1节点添加到树控件下
对应的树控件如下图:
获取选中节点的文本:treeView1.SelectedNode.Text
添加节点图片,遍历所有节点,获取被核记的节点
添加图片:首先跟ListView控件一样,新建一个ImageList对象,再添加图片。然后把它赋给控件类对应的ImageList。
上面我设置节点文本,是通过构造函数把字符串传进去的,其实也可以设置节点属性Text,也就是直接赋值给
node1.Text来设置节点项文本。那么相应的node1下还有其它属性,这些属性就是设置节点对应的图片了。
ImageIndex存储节点显示的图片索引。SelectedImageIndex存储节点被选中时显示的图片索引。
看下面示例代码:
//新建图片集ImageList
System.Windows.Forms.ImageList imgList = new System.Windows.Forms.ImageList();
//32位颜色
imgList.ColorDepth = System.Windows.Forms.ColorDepth.Depth32Bit;
//添加图标
imgList.Images.Add(new System.Drawing.Icon("d:\\Image\\1.ico"));
imgList.Images.Add(new System.Drawing.Icon("d:\\Image\\2.ico"));
imgList.Images.Add(new System.Drawing.Icon("d:\\Image\\3.ico"));
//将imgList赋值给控件,引用
treeView1.ImageList = imgList;
//设置节点对应的图片
node1.ImageIndex=0;
node1.SelectedImageIndex=1;
node2.ImageIndex=2;
node2.SelectedImageIndex=2;
接下来,看一下复选框的应用
//先显示复选框,允许复选
this.treeView1.CheckBoxes = true;
//设置项高度
this.treeView1.ItemHeight = 20;
显示了复选框,我们就得遍历所有结点,获取被选中的节点文本
需要了解的东西:
TreeNodeCollection类是TreeNode类的集合,treeView.Nodes是TreeNodeCollection类对象,TreeNodeCollection里的
Count记录树控件有多少根节点(没有父节点的节点),而treeView.Node[0]它的类型是TreeNode(索引返回值是TreeNode类型),
所以treeView.Node[0]可以访问TreeNode类里的属性成员和方法,例如GetNodeCount这个方法,
这个方法有一个布尔参数,false只获取同级子节点的数量,true获取一个节点下的所有节点。
如果返回值是0的话,表明这个节点没有子节点。这个方法可以判一个节点是不是父节点。
TreeNode类有一个TreeNodeCollection类对象Nodes,用来记录节点下的子节点。跟TreeView类下的Nodes是一样的。
遍历所有结点,先定义一个递归函数,以TreeNodeCollection为参数类型,在函数里判断TreeNodeCollection类里的
Count是多少,然后再用GetNodeCount函数依次判断每个节点是否有子节点,如果有,递归调用函数。将这个节点的
Nodes传进去。
看下列代码:
private String GetCheckText(System.Windows.Forms.TreeNodeCollection Nodes)
{
String strText = "";
for (int i = 0; i < Nodes.Count; i++)
{
//有子项
if (Nodes[i].GetNodeCount(false) > 0)
{
//被勾选
if (Nodes[i].Checked == true)
{
strText += Nodes[i].Text;
strText += "\n";
}
//递归调用
strText += GetCheckText(Nodes[i].Nodes);
}
//如果复选框被选中
else if (Nodes[i].Checked == true)
{
strText += Nodes[i].Text;
strText += "\n";
}
}
//返回Nodes集合节点中所有文本(包括所有子节点的)
return strText;
}
private void button1_Click(object sender, EventArgs e)
{
//调用GetCheckText函数
String str = GetCheckText(treeView1.Nodes);
//输出所有选中节点文本
MessageBox.Show(str);
}
运行效果:
ToolTip设置控件工具文本提示
先来看ToolTip类里的几个属性:(毫秒为单位)
AutoPopDelay这个指定工具文本提示栏所显示的时间。比如设置2000,当提示栏出现后,再过两秒就会消失。
InitialDelay这个指定当鼠标停留在控件多久,才显示文本提示栏.
ReshowDelay这个指定鼠标离开控件后,过多久提示栏消失(如果提示栏出现)
ShowAlways这个是一个布尔类型,为true时,表示即使当前窗口不是激活状态(最前端窗口),鼠标停留在对应的控件时,依然会显示工具提示栏。
而ToolTip类里的SetToolTip方法,就是用来设置其关联的控件和要显示的文本了。一个按钮控件的使用示例:
toolTip1.SetToolTip(this.button1, "这个是我的工\n具文本提示");