这是C# Winform变成自学笔记第六篇,上接《五》;
内容一览
- 底部工具栏 StatusStrip
- 控制时间 Timer
- 表格 ListView
- 目录导览 TreeView
————————正文————————
(一)底部工具栏 StatusStrip
status控件主要出现在当前Windows窗体的底部,一般使用文本和图像向用户显示应用程序当前的状态,该控件位于“菜单和工具栏”区域;
statusa控件允许添加的控件包括:
StatusLabel | 标签控件 |
---|---|
ProgressBar | 进度条控件 |
DropDownButton | 下拉列表控件 |
SplitButton | 分割控件 |
案例学习:
1)在Form窗体上拖拽一个GroupBox控件,用于建立“文本信息显示区”容器:一个RichTextBox控件,用于编辑文本;一个按钮对象为“统计字数”;一个StatusStrip控件用于在底部显示统计信息,同时为StatusStrip控件增加一个StatusLabel标签,用于显示统计信息。
2)添加如下代码:
public partial class Form2 : Form
{
public Form2()
{
InitializeComponent();
}
private void Form2_Load(object sender, EventArgs e)
{
toolStripStatusLabel1.Text = "现在的日期是:" + DateTime.Now.ToShortDateString() + ":现在的时间是:" + DateTime.Now.ToShortTimeString();
}
private void button1_Click(object sender, EventArgs e)
{
toolStripStatusLabel1.Text = "字数信息是:" + richTextBox1.Text.Length;
}
private void button2_Click(object sender, EventArgs e)
{
//定义要增加的底部工具栏
StatusStrip sb = new StatusStrip();
//定义底部工具栏项目中的控件,StatusLabel是一个类似于Label的标签控件,现在用于显示文字
ToolStripLabel tsl = new ToolStripLabel();
//要显示的文字内容
tsl.Text = "新增的工具条";
//定义底部工具栏中的项目
ToolStripItem[] tsi = new ToolStripItem[1];
tsi[0] = tsl;
//将项目添加到StatusStrip当中去
sb.Items.AddRange(tsi);
//将StatusStrip加入到窗体中
this.Controls.Add(sb);
}
}
实验结果:
(二)Timer控件
使某一事件按具体时间运行,Timer属于Timer类;
值得注意的是,Timer控件不会在设计中显示出来,浅白地说,它与用户无关,因此不提供用户界面。
该控件可以用于控制程序在规定的时刻执行相应动作,或者按照某个周期触发一个具体的事件。
Timer属性及方法:
项目 | 说明 |
---|---|
Enable | 时钟是否可用 |
Interval | 时钟每间隔多长时间触发一次tick事件,时间间隔单位是ms |
Start | 时钟启动 |
Stop | 时钟停止 |
Tick | 每隔Interval时间间隔触发一次 |
案例学习:
1)从工具箱中拖拽出一个pictureBox图片控件和两个button控件,在Winform窗体上布置完毕以后,再从工具箱中拖拽出一个Timer控件,完成界面的布置工作。
【这个实验动态效果看起来像走马灯】
2)将Timer控件的Enable属性设置为True;双击“播放按钮”,对其代码编辑如下:
private void button1_Click(object sender, EventArgs e)
{
timer1.Start();
}
3)双击“停止按钮”,键入如下代码:
private void button2_Click(object sender, EventArgs e)
{
timer1.Stop();
}
4)双击time1控件对象,在其Tick事件中键入如下代码:
private void timer1_Tick(object sender, EventArgs e)
{
pictureBox1.Left -= 5;//图片对象每间隔一段时间向左挪5像素
if(pictureBox1.Right<0)//如果图片右边小于零,则图片从当前窗体左侧消失
{
pictureBox1.Left = Width;//则图片的左侧设置为窗体宽度,并再次从右侧出现
}
}
实验结果:
(三)表格 ListView
ListView是像资源管理器左侧的目录列表一样的控件,一般来说,可以显示四种视图模式,即大图标,小图标,列表和详细资料,另外还可以用特定样式或者视图类型来显示列表项。
Columns:列;
Items:行;
ListView方法及属性:
属性 | 说明 |
---|---|
Itmes | ListView中的具体内容 |
MultiSelect | 允许选择多个项 |
SelectedItems | 用户选择的ListView行 |
Sorting | 指定进行排序的方法 |
Columns | 详细视图中显示的列信息 |
Clear() | 彻底清除视图,删除所有的选项和列 |
GetItemAt() | 返回列表视图中位于x,y的选项 |
Sort() | 进行排序,仅限于字母数字类型 |
BeginUpdate | 开始更新,直到调用EmdUpdate为止,当一次插入多个选项时这个方法很有用,因为它会禁止视图闪烁,并可以大大提高速度 |
EndUpdate | 结束更新 |
在所有属性中,最重要的是Column集合和Column对象。ListView控件的Columns属性表示控件中出现的所有列标题加粗样式的集合,而列标题是ListView控件汇总包含标题文本的一个项。
设置完Column集合相当于完成了表的表头设计工作(列设计),另外一项重要的工作是设置表的每一行信息,ListView控件的设置中与行配置有关的是Items集合和Items项对象。
Items属性返回ListView.LIstViewItemCollection,可以用于在ListView中添加新项、删除项或计算可用项。
实践案例:
1)从工具箱拖拽一个ImageLIst图片列表控件,和一个ListView控件,在图片列表控件中加载若干图片信息;
2)选中ListView控件,配置其LargeImageList和SmallImageLIst的属性分别为ImageList控件对象;
3)选中ListView控件,通过Columns属性或者编辑列,打开Columnheader集合编辑器,在集合编辑器中设置图片列表内容和表头名称;
4)选中ListView控件,设置其View属性为Details,至此,ListView控件的列信息设置完毕;下面开始设置行信息:
5)选中ListView控件的Items属性,开始进行行信息的设置工作,在打开的ListViewItem集合编辑器中,连续添加若干项内容,并分别为每项填入text属性值,需要注意的是,此处信息的填写可以理解为表的每行信息的“键”的概念,该行其他列信息的填写工作需要单击SubItems属性继续配置。
6)单击某行的SubItems属性,进入ListViewSubItems配置界面,该界面主要设置某行除“键”值信息以外其他列的信息。
实验结果:
(四)目录导览 TreeView
树状导览形式的目录。
在TreeView中,最重要的概念就是节点和节点集;
Nodes——节点集;
节点集中Add(),Remove(),RemoveAt()方法可以使开发人员添加和移动单个树结点;
TreeView控件的操作主要包括加入子节点或兄弟节点、删除节点、展开和折叠节点等。
①加入子节点。
首先,在TreeView组件中确定要加入的子节点的位置,然后创建一个节点对象,利用TreeView类对节点的加入方法,添加子节点的语句为:
treeView1.SelectedNode.Nodes.Add(tmp);
②加入兄弟节点
先找当前选中节点的父节点,然后再该父节点下面建立子节点;
treeView1.SelectedNode.Parent.Nodes.Add(tmp);
③删除节点
首先判断要删除的结点是否存在下一级结点,如果不存在,则调用Remove方法。
treeView1.SelectedNode.Romove();
④展开结点
首先获取当前TreeView控件的根节点,然后利用ExpandAII方法展开结点。
//定位根节点
treeView1.SelectedNode=treeView1.Nodes[0];
//展开组件中所有节点
treeView1.SelectedNode.ExpandAII();
⑤展开选定结点的下一级节点
首先获取当前选中的节点,然后利用Expand方法折叠结点
treeView1.SelectedNode = treeView1.Nodes[0];
treeView1.SelectNode.Collapse();
实际操作:
1)从工具箱拖拽一个textbox控件,一个treeView控件和三个Button控件;
2)从工具箱的菜单和工具栏中拖拽一个ContentMenuStrip控件,并设置该菜单的三个子菜单名称。该控件主要用于右击TreeView控件时,弹出用户自定义快捷菜单。
3)具体功能实现代码为:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace UNIT2_2
{
public partial class Form5 : Form
{
public Form5()
{
InitializeComponent();
}
private void Form5_Load(object sender, EventArgs e)
{
treeView1.Nodes.Clear();
TreeNode tem = new TreeNode("根节点");
treeView1.SelectedNode.Nodes.Add(tem);
}
private void AddChildNode()
{
if(treeView1.SelectedNode==null)
{
MessageBox.Show("请选择一个结点","提示信息",MessageBoxButtons.OK,MessageBoxIcon.Information);
}
else
{
if(textBox1.Text!=" ")
{
TreeNode tmp;
tmp=new TreeNode(textBox1.Text);
treeView1.SelectedNode.Nodes.Add(tmp);
treeView1.ExpandAll();
}
}
}
private void AddParent()
{
try{
if(treeView1.SelectedNode==null)
{
MessageBox.Show("请选择一个结点","提示信息",MessageBoxButtons.OK,MessageBoxIcon.Information);
}
else{
if(textBox1.Text!=" ")
{
TreeNode tmp;
tmp = new TreeNode(textBox1.Text);
treeView1.SelectedNode.Parent.Nodes.Add(tmp);
treeView1.ExpandAll();
}
else
{
MessageBox.Show("请选择一个结点","提示信息",MessageBoxButtons.OK,MessageBoxIcon.Information);
return;
}
}
}
catch{
TreeNode tem = new TreeNode("根节点");
treeView1.Nodes.Add(tem);
}
}
private void treeView1_MouseDown(object sender,MouseEventArgs e)
{
if(e.Button==MouseButtons.Right)
contextMenuStrip1.Show(this,new Point (e.X,e.Y));
}
private void button1_Click(object sender, EventArgs e)
{
treeView1.SelectedNode.Expand();
}
private void button2_Click(object sender, EventArgs e)
{
treeView1.SelectedNode = treeView1.Nodes[0];
treeView1.SelectedNode.ExpandAll();
}
private void button3_Click(object sender, EventArgs e)
{
treeView1.SelectedNode= treeView1.Nodes[0];
treeView1.SelectedNode.Collapse();
}
private void 加入子节点ToolStripMenuItem_Click(object sender, EventArgs e)
{
AddChildNode();
}
private void 加入兄弟节点ToolStripMenuItem_Click(object sender, EventArgs e)
{
AddParent();
}
private void 删除节点ToolStripMenuItem_Click(object sender, EventArgs e)
{
if(treeView1.SelectedNode.Nodes.Count==0)
{
treeView1.SelectedNode.Remove();
}else
{
MessageBox.Show("请选择一个结点","提示信息",MessageBoxButtons.OK,MessageBoxIcon.Information);
}
}
}
}
实验结果:
零散笔记
1.如何显示当前的时间和日期?
private void Form2_Load(object sender, EventArgs e)
{
toolStripStatusLabel1.Text = "现在的日期是:" + DateTime.Now.ToShortDateString() + ":现在的时间是:" + DateTime.Now.ToShortTimeString();
}
2.如何统计RichBox文字栏中的字数
private void button1_Click(object sender, EventArgs e)
{
toolStripStatusLabel1.Text = "字数信息是:" + richTextBox1.Text.Length;
}
3.属性和事件方法在使用上的区别
可以将属性看做是一个值,一个变量;方法就是附属的函数;
再直白点说,调用方法的时候要在后面加括号,属性不用。