12. Windows应用程序高级控件

15 篇文章 4 订阅

1 ImageList控件(存储图像空开控件)

ImageList控件(存储图像空开控件)用于存储图像资源,然后在控件上显示出来,这样就简化了对图像的管理。ImageList控件的主要属性是Images,它包含关联控件将要使用的图片。每个单独的图像可以通过其索引值或其键值来访问。所有图像都将以同样的大小显示,改大小由ImageSize属性设置,较大的图像将缩小至适当的尺寸。

ImageList实际上就相当于一个图片集,也就是将多个图片存储到图片集中,当想要对某一图片进行操作时,只需根据其图片的编号,就可以找出该图片,对其进行操作。

1.1 在ImageList控件中添加图像

使用ImageList控件的Images属性的Add方法,可以通过编程的方式向ImageList控件中添加图像。

语法:

publiv void Add(Image value)
-- value:要添加到列表中的图像

实例:

private void Form1_Load(object sender, EventArgs e)
{
    //将图片放到项目的debug目录下,例如 WinFormsApp1\bin\Debug
    //加载图片路径
    string Path = Application.StartupPath.Substring(0, Application.StartupPath.Substring(0, Application.StartupPath.LastIndexOf("\\")).LastIndexOf("\\"));
    Path += @"\001.jpeg";
    string Path2 = Application.StartupPath.Substring(0, Application.StartupPath.Substring(0, Application.StartupPath.LastIndexOf("\\")).LastIndexOf("\\"));
    Path2 += @"\002.jpeg";
    Image Ming = Image.FromFile(Path, true);
    Image Ming2 = Image.FromFile(Path2, true);
    imageList1.Images.Add(Ming);
    imageList1.Images.Add(Ming2);
    imageList1.ImageSize = new Size(200, 165);
    pictureBox1.Width = 200;

}
private void button1_Click(object sender, EventArgs e)
{
    pictureBox1.Image = imageList1.Images[0];
}
private void button3_Click(object sender, EventArgs e)
{
    pictureBox1.Image = imageList1.Images[1];
}

效果:
在这里插入图片描述
在这里插入图片描述

说明:
向ImageList组件中添加存储图片时,可以通过该组件的ImageSize属性设置图片的尺寸,其默认尺寸是1616,最大尺寸为256256。

1.2 在ImageList控件中移除图像

在ImageList控件中可以使用RemoveAt方法移除单个图像或使用Clear方法清除图像列表中所有图像。

语法:

public void RemoveAt(int index)
--index:要移除的图像的索引
public void Clear
--Clear方法主要用于从ImageList集合中移除所有图像。

实例:

//使用Images属性Add、Clear和RemoveAt将图片添加和移除
private void Form1_Load(object sender, EventArgs e)
{
    pictureBox1.Width = 200;
    pictureBox1.Height = 165;
    string Path = Application.StartupPath.Substring(0, Application.StartupPath.Substring(0, Application.StartupPath.LastIndexOf("\\")).LastIndexOf("\\"));
    Path += @"\001.jpeg";
    Image img = Image.FromFile(Path, true);
    imageList1.Images.Add(img);
    imageList1.ImageSize = new Size(200, 165);
}
private void button1_Click(object sender, EventArgs e)
{
    if (imageList1.Images.Count == 0)
    {
        MessageBox.Show("没有图像");
    }
    else
        pictureBox1.Image = imageList1.Images[0];
}
private void button3_Click(object sender, EventArgs e)
{
    imageList1.Images.RemoveAt(0);//如果该所引处无image则引发异常
    //imageList1.Images.Clear();
}

效果

在这里插入图片描述
![在这里插入图片描述](https://img-blog.csdnimg.cn/20210421214957867.png

2 ListView控件(列表视图控件)

ListView控件(列表视图控件)显示带图标的项的列表,可以显示大图标、小图标和数据。
ListView控件可以通过View属性设置项在控件中显示的方式。
View属性的值及其说明:

属性值说明
Details每个项显示在不同的行上,并带有关于列中所排列的各项的进一步信息。最左边的列包含一个小图标和标签,后面的列包含应用程序指定的子项。列显示一个标头,它可以显示列的标题。用户可以在运行时调整各列的大小
LargeIcon每个项都显示为一个最大的图标,在他的下面有一个标签。这是默认的视图模式。
List每个项都显示为一个小图标,在它右边带一个标签,各项排列在列中,没有列标头
SmallIcon每个项都显示为一个小图标,在它右边带一个标签
Title每个项都显示为一个完整大小的图标,在它的右边带项标签和子项信息。显示的子项信息由应用程序指定。此视图仅在下面的平台上受支持:Windows XP和Windows Server 2003系列。在之前的操作系统上此值被忽略,并且ListView控件以:LargeIcon视图显示

2.1 在ListView控件中添加和移出项

  1. 添加项

可以使用ListView控件的Items属性的Add方法向控件中添加项。

语法:

public virtual ListViewItem Add(string text,int imageIndex)
text:项的文本
imageIndex:要为该项显示的图像的索引
返回值:已经添加到集合中的ListViewItem

实例:

//通过ListView控件的Items属性的Add方法向控件中添加项
private void button3_Click(object sender, EventArgs e)
{
    if (textBox1.Text == "")
    {
        MessageBox.Show("项目不能为空");
    }
    else
        listView1.Items.Add(textBox1.Text.Trim());
}

效果:
在这里插入图片描述
2. 移除项

通过使用控件Items属性的RemoveAt方法或Clear方法可以移除控件中的项。RemoveAt方法移除指定项,Clear方法移除所有项。
再删除ListView控件中的项目前,必须对项目的个数进行判断。如果为0则不进行删除,否则会触发异常。

语法:

public virtual void RemoveAt(int index)
--index:从零开始的索引(要移除的项)
public virtual void Clear()
--Clear方法从集合中移除所有项

实例:

private void button3_Click(object sender, EventArgs e)
{
    if (textBox1.Text == "")
    {
        MessageBox.Show("项目不能为空");
    }
    else
        listView1.Items.Add(textBox1.Text.Trim());
}
private void button4_Click(object sender, EventArgs e)
{
    if (listView1.SelectedItems.Count==0)
    {
        MessageBox.Show("请选择要删除的项");
    }
    else
    {
        //使用RemoveAt移除选择的项目
        listView1.Items.RemoveAt(listView1.SelectedItems[0].Index);
        //取消控件的选择
        listView1.SelectedItems.Clear();
    }
}
private void button1_Click(object sender, EventArgs e)
{
    if(listView1.Items.Count == 0)
    {
        MessageBox.Show("项目中已经没有项目");
    }
    else
    {

        listView1.Items.Clear();
    }
}

效果:
在这里插入图片描述

2.2选择ListView控件中的项

通过控件的Selected属性可以设置控件中的选择项。Selected属性用于获取或设置一个值,该值指示是否选定此项。
语法:

public bool Selected { get; set; }
属性值:如果选定此项,则为true:否则为false

实例:

private void Form1_Load(object sender, EventArgs e)
{
    listView1.Items.Add("张三");
    listView1.Items.Add("李四");
    listView1.Items.Add("王五");
    listView1.Items[1].Selected = true;
}

效果:

在这里插入图片描述
说明:
如果用按钮控件选择ListView控件中的项,除了使用Selected属性选择指定的项外,还通过Focus方法使得ListView控件获得焦点。

2.3 为ListView控件中的项添加图标

如果为ListView控件中的项添加图标,则需要与ImageList控件相结合。使用ImageList控件设置ListView控件中项的图标,ListView控件可显示3个图像列表中的图标。List视图、Details视图和SmallIcon视图显示SmallImageList属性中指定的图像列表中的图像。LargeIcon视图显示LargeImageList属性中指定的图像列表中的图像。
列表视图还可以在大图标或小图标旁显示StateImagList属性中设置的一组附加图片。实现布置如下:
①将相应的属性(SmallImageList、LargeImageList或StateImageList)设置为想要使用的现有ImageList组件。
②为每个具有关联图标的列表项设置ImageIndex或StateImageIndex属性。这些属性乐意在代码中设置,或在“ListViewItem集合编辑器”中进行设置。若要打开“ListViewItem集合编辑器”,可在属性窗口中单击items属性旁边的省略号按钮,这些属性可在设计器中使用属性窗口进行设置,也可在代码中设置。

实例:

private void Form1_Load(object sender, EventArgs e)
{
    listView1.LargeImageList = imageList1;
    imageList1.ImageSize = new Size(37, 36);
    imageList1.Images.Add(Image.FromFile("001.jpeg"));
    imageList1.Images.Add(Image.FromFile("002.jpeg"));
    listView1.SmallImageList = imageList1;
    listView1.Items.Add("张三");
    listView1.Items.Add("李四");
    listView1.Items[0].ImageIndex = 0;
    listView1.Items[1].ImageIndex = 1;
}

效果:
在这里插入图片描述
说明:
如果想要将ImageList组件中的大图标显示在ListView控件中的各项时,一般使用LargeImageList属性。如果要设置大图标,一般使用StateImageList属性进行设置。

2.4 在ListView控件中启用平铺视图

启用ListView控件的平铺视图功能,可以在图型信息和文本信息之间提供一种视觉平衡。为平铺视图中的某项显示的文本信息与为详细信息视图定义的列信息相同。在ListView控件中,平铺视图与分组功能或插入标记功能一起结合使用。如果要启用平铺视图,需要将View属性设置为Title,可以通过TitleSize属性来调整平铺的大小。

实例:

private void Form1_Load(object sender, EventArgs e)
{
    listView1.View = View.Tile;
    listView1.LargeImageList = imageList1;
    imageList1.ImageSize = new Size(10,10);
    imageList1.Images.Add(Image.FromFile("001.jpeg"));
    imageList1.Images.Add(Image.FromFile("002.jpeg"));
    listView1.Items.Add("张三");
    listView1.Items.Add("李四");
    listView1.Items.Add("张三");
    listView1.Items.Add("李四");
    listView1.Items.Add("张三");
    listView1.Items.Add("李四");
    listView1.Items[0].ImageIndex = 0;
    listView1.Items[1].ImageIndex = 1;
    listView1.Items[2].ImageIndex = 0;
    listView1.Items[3].ImageIndex = 1;
    listView1.Items[4].ImageIndex = 0;
    listView1.Items[5].ImageIndex = 1;
    listView1.TileSize = new Size(100, 50);
}

效果:
在这里插入图片描述
说明:
在对ListView控件的GridLines(行和列之间是否显示网格线)和FullRowSelect(单击某项是否选择其所有子项)属性进行操作时,必须将View属性设置为View.Details。

2.5 为ListView控件中的项分组

使用ListView控件的分组功能可以用分组形式显示相关项组。在屏幕上,这些组由包含组标题的水平组标头分割。可以使用ListView按字母顺序、日期或任何其它逻辑组合对项进行分组,从而简化大型列表的导航。若要启用分组,首先必须在设计器中或以编程方式创建一个或多个组。定义组后,可以向组分配ListView项。此外,可以用编程方式将一个组中的项移至另外一个组中。

  1. 添加组

使用Groups集合的Add方法可以向控件中添加组,Add方法用于将指定的ListViewGroup添加到集合。
语法:

public int Add(ListViewGroup group)
--group:要添加到集合中的ListViewGroup 
--返回值:该组在集合中的索引。或者如果集合中已存在改组,则为-1

实例:

private void Form1_Load(object sender, EventArgs e)
{
    listView1.Groups.Add(new ListViewGroup("测试",HorizontalAlignment.Left));
    listView1.Items.Add("1");
    listView1.Items[0].Group = listView1.Groups[0];
}

效果:在这里插入图片描述

  1. 移除组

使用Groups集合的RemoveAt或Clear方法,可以移除指定的组或者移除所有的组。
语法:

public void RemoveAt(int index)
--index:要移除的ListViewGroup的集合的索引
public void Clear()
--Clear方法用于移除集合中所有组

实例:

listView1.Group.RemoveAt(1);//移除索引为1的组
listView1.Group.Clear(1); 移除ListView1中所有的组
  1. 向组分配项或在组之间移动项

设置各个项的System.Windows.Forms.ListViewItem.Groups属性,可以向组分配项或在组之间移动项。
如果想要临时禁用分组功能,可以将ShowGroups属性设置为false。

//将ListView控件的第一项分配到第一组中
listView1.Items[0].Group = listView1.Groups[0];

实例:

private void Form1_Load(object sender, EventArgs e)
{
    listView1.Groups.Add(new ListViewGroup("姓名",HorizontalAlignment.Left));
    listView1.Groups.Add(new ListViewGroup("年龄", HorizontalAlignment.Left));
    listView1.Items.Add("张三");
    listView1.Items.Add("李四");
    listView1.Items.Add("王五");
    listView1.Items.Add("28");
    listView1.Items.Add("18");
    listView1.Items.Add("30");
    listView1.Items[0].Group = listView1.Groups[0];
    listView1.Items[1].Group = listView1.Groups[0];
    listView1.Items[2].Group = listView1.Groups[0];
    listView1.Items[3].Group = listView1.Groups[1];
    listView1.Items[4].Group = listView1.Groups[1];
    listView1.Items[5].Group = listView1.Groups[1];
}

效果:
在这里插入图片描述

3 TreeView控件(树控件)

TreeView控件(树控件)可以为用户显示节点层次结构,每个节点又可以包含子节点,包含子节点的节点叫父节点。

3.1 添加和删除树节点

  1. 添加节点

使用TreeView控件Nodes属性的Add方法,可以向控件中添加节点。
语法:

public virtual intAdd(TreeNode node)
node:要添加到集合中的TreeNode。
返回值:添加到树节点集合中的TreeNode的从零开始的索引。

实例:

private void Form1_Load(object sender, EventArgs e)
{
    TreeNode tn1 = treeView1.Nodes.Add("姓名");
    TreeNode tn2 = treeView1.Nodes.Add("年龄");
    TreeNode tn3 = treeView1.Nodes.Add("性别");
    TreeNode Ntn1 = new TreeNode("张三");
    TreeNode Ntn2 = new TreeNode("李四");
    TreeNode Ntn3 = new TreeNode("王五");
    TreeNode Atn1 = new TreeNode("18");
    TreeNode Atn2 = new TreeNode("28");
    TreeNode Atn3 = new TreeNode("38");
    TreeNode Stn1 = new TreeNode("男");
    TreeNode Stn2 = new TreeNode("女");
    TreeNode Stn3 = new TreeNode("不详");
    tn1.Nodes.Add(Ntn1);
    tn1.Nodes.Add(Ntn2);
    tn1.Nodes.Add(Ntn3);
    tn2.Nodes.Add(Atn1);
    tn2.Nodes.Add(Atn2);
    tn2.Nodes.Add(Atn3);
    tn3.Nodes.Add(Stn1);
    tn3.Nodes.Add(Stn2);
    tn3.Nodes.Add(Stn3);
}

效果:
在这里插入图片描述

  1. 移除节点

使用TreeView控件的Nodes属性的Remove方法可以从树节点中移除指定的树节点。
语法:

public void Remove (TreeNode node)
node:要移除的TreeNode

实例:

private void Form1_Load(object sender, EventArgs e)
{
    TreeNode tn1 = treeView1.Nodes.Add("姓名");
    TreeNode Ntn1 = new TreeNode("张三");
    TreeNode Ntn2 = new TreeNode("李四");
    TreeNode Ntn3 = new TreeNode("王五");
    tn1.Nodes.Add(Ntn1);
    tn1.Nodes.Add(Ntn2);
    tn1.Nodes.Add(Ntn3);
}
private void button1_Click(object sender, EventArgs e)
{
    if (treeView1.SelectedNode.Text== "姓名")
    {
        MessageBox.Show("请选择要删除的子节点");

    }
    else
    {
        treeView1.Nodes.Remove(treeView1.SelectedNode);
    }
}

效果:
在这里插入图片描述

3.2 获取树控件中选中的节点

通过控件的AfterSelect事件,可以使用EventArgs对象返回对已单击节点对象的引用。通过检查TreeViewEventArgs类(它包含与事件有关的数据)确定点击了哪个节点。
在BeforeCheck(在选中树节点复选框前发生)或AfterCheck(在选中树节点复选框后发生)事件中尽可能不要使用TreeNode.Checked属性。

实例:

private void Form1_Load(object sender, EventArgs e)
{
    TreeNode tn1 = treeView1.Nodes.Add("姓名");
    TreeNode Ntn1 = new TreeNode("张三");
    TreeNode Ntn2 = new TreeNode("李四");
    TreeNode Ntn3 = new TreeNode("王五");
    tn1.Nodes.Add(Ntn1);
    tn1.Nodes.Add(Ntn2);
    tn1.Nodes.Add(Ntn3);
}
private void treeView1_AfterSelect(object sender, TreeViewEventArgs e)
{
    label1.Text = "当前选中的节点:  " + e.Node.Text;
}

效果:
在这里插入图片描述

3.3 为树控件中的节点设置图标

TreeView控件可在每个节点旁显示图标。图标紧挨着节点文本的左侧。若要显示这些图标,必须使树视图与ImageList控件项关联。
①设置TreeView控件的ImageList属性为想要使用的现有的ImageList控件。这些属性可以在设计器中使用属性窗口进行设置,也可在代码中设置。

treeView1.ImageList = imageList1;
//设置控件的ImageList属性为imageList1

②设置节点的ImgeIndex和SelectedImageIndex属性。ImageIndex属性确定正常和展开状态下的节点显示的图像。SelectedImageIndex属性确定选定状态下的节点显示的图像。

treeView1.ImageIndex = 0;
treeView1.SelectedImageIndex = 1;
//设置控件的ImageIndex 属性确定正常或展开状态下的节点显示的图像为索引0
//设置SelectedImageIndex 属性,确定选定状态下的节点显示的图像的的索引为1

实例:

private void Form1_Load(object sender, EventArgs e)
{
    TreeNode tn1 = treeView1.Nodes.Add("姓名");
    TreeNode Ntn1 = new TreeNode("张三");
    TreeNode Ntn2 = new TreeNode("李四");
    TreeNode Ntn3 = new TreeNode("王五");
    tn1.Nodes.Add(Ntn1);
    tn1.Nodes.Add(Ntn2);
    tn1.Nodes.Add(Ntn3);
    imageList1.Images.Add(Image.FromFile("001.jpeg"));
    imageList1.Images.Add(Image.FromFile("002.jpeg"));
    imageList1.Images.Add(Image.FromFile("003.jpeg"));
    treeView1.ImageList = imageList1;
    imageList1.ImageSize = new Size(16,16);
    treeView1.ImageIndex = 0;
    treeView1.SelectedImageIndex = 1;
}

效果:
在这里插入图片描述

说明:
在用TreeView控件对各磁盘的文件进行显示时,可以通过控件的SelectedNode的FullPath属性获取当前所选择节点(文件或文件夹)目录,需要将该控件的PathSeparator属性值设为“\”。

4 DateTimePicker控件(日期控件)

DateTimePicker控件(日期控件)用于选择日期和时间,DateTimePicker控件只能选择一个时间,而不是连续的时间段,也可以直接输入日期和时间。

4.1 使用DateTimePicker控件显示时间

通过将控件的Format属性设置为Time,实现控件只显示时间。Format属性用于获取设置控件中显示的日期或时间格式。
语法:

public DateTimePickerFormat Format { get ; set ;}
--属性值:DateTimePickerFormat 值之一,默认为Long

DateTimePickerFormat枚举的值及说明:

枚举值说明
CustomDateTimePicker控件以自定义格式显示日期/时间值
LongDateTimePicker控件以用户操作系统设置的长日期格式显示日期/时间值
ShortDateTimePicker控件以用户操作系统设置的短日期格式显示日期/时间值
TimeDateTimePicker控件以用户操作系统设置的时间格式显示日期/时间值

实例:

private void Form1_Load(object sender, EventArgs e)
{
    //设置dateTimePicker1的Format属性为Time,使其只显示时间
    dateTimePicker1.Format = DateTimePickerFormat.Time;
    textBox1.Text = dateTimePicker1.Text;
}

效果:
在这里插入图片描述

说明:如果想要在该控件内用按钮调整时间值,则需要将ShowUpDown属性设置为true。

4.2 使用DateTimePicker控件以自定义格式显示日期

通过DateTimePicker控件的CustomFormat属性可以自定义日期/时间格式的字符串。
语法:

public string CustomFormat{ get ; set ;}
属性值:表示自定义日期/时间格式的字符串

注意:
Format属性必须设置为DateTimePickerFormat.Custom,才能影响显示的日期和时间的格式设置。

通过组合格式字符串,可以设置日期和时间格式,所有的有效格式字符串及其说明如下表:

格式字符串说明
d一位数或俩位数的天数
dd俩位数的天数,一位数天数前面加一个0
ddd三个字符的星期几缩写
dddd完整的星期几名称
h12小时格式的一位数或俩位数小时数
hh12小时格式的俩位数小时数,一位数数值前面加一个0
H24小时格式的一位数或俩位数小时数
HH24小时格式的俩位数小时数,一位数数值前面加一个0
m一位数或俩位数分钟值
mm俩位数分钟值。一位数数值前面加一个0
M一位数或俩位数月份值
MM俩位数月份值。一位数数值前面加一个0
MMM三个字符的月份缩写
MMMM完整的月份名
s一位数或俩位数秒数
ss俩位数秒数。一位数数值前面加一个0
t单字母A.M./P.M缩写(A.M将显示为A)
tt单字母A.M./P.M缩写(A.M将显示为AM)
y一位数的年份(2001显示为1)
yy年份的最后俩位数(2001显示为01)
yyyy完整的年份(2001显示为2001)

实例:

private void Form1_Load(object sender, EventArgs e)
{
    dateTimePicker1.Format = DateTimePickerFormat.Custom;
    dateTimePicker1.CustomFormat = "MMMM dd,yyyy - dddd";
    textBox1.Text = dateTimePicker1.Text;
}

效果:
在这里插入图片描述

4.3 返回DateTimePicker控件中选择的日期

调用控件的Text属性以返回与控件中的格式相同的完整值,或调用Value属性的适当方法来返回部分值,这些方法包括Year、Month和Day方法等,使用ToString将信息转换成可显示给用户的字符串。

实例:

private void Form1_Load(object sender, EventArgs e)
{
    textBox1.Text = dateTimePicker1.Text;
    textBox2.Text = dateTimePicker1.Value.Year.ToString();
    textBox3.Text = dateTimePicker1.Value.Month.ToString();
    textBox4.Text = dateTimePicker1.Value.Day.ToString();
}

效果:
在这里插入图片描述

说明:
如果想要直接获取系统当前的日期和时间,可以使用Value属性下的ToShortDateString和ToShortTimeString方法。

5 MonthCalendar控件(月历控件)

MonthCalendar控件(月历控件)提供了一个直观的图形界面,可以让用户查看和设置日期。MonthCalendar控件中可以使用鼠标进行拖拽,用于选择一段连续的时间,此段连续的时间包括时间的起使和结束。

5.1 更改MonthCalendar控件的外观

MonthCalendar控件允许用多种方法自定义月历的外观。例如,可以设置配色方案并选择显示或隐藏周数和当前日期。

  1. 更改月历的配色方案

设置TitleBackColor、TitleForeColor和TrailingForeColor等属性可以更改月历控件的配色方案。TitleBackColor属性用于设置日历标题区的背景色,TitleForeColor属性用于设置日历标题区的前景色,TrailingForeColor属性用于设置没有完全显示的日期的颜色。

private void Form1_Load(object sender, EventArgs e)
{
    // 控件的标题背景色为蓝色
    monthCalendar1.TitleBackColor = System.Drawing.Color.Blue;
    // 控件的其他日期颜色为红色
    monthCalendar1.TitleForeColor = System.Drawing.Color.Red;
    // 控件的标题验色为黄色
    monthCalendar1.TitleForeColor = System.Drawing.Color.Yellow;
}

效果:
在这里插入图片描述

  1. 显示周数

实例:

private void Form1_Load(object sender, EventArgs e)
{
    //ShowWeekNumbers属性设置为true显示周数
    monthCalendar1.ShowWeekNumbers = true;
}

效果:
在这里插入图片描述

将ShowWeekNumbers属性设置为true,实现在控件中显示周数。也可以用代码或在属性窗口中设置此属性。周数以单独的列出现在一周的第一天的左边。

5.2 在MonthCalendar控件中显示多个月份

MonthCalendar控件最多可同时显示12个月。默认情况下,控件只显示1个月,但可以通过设置CalendarDimensions属性指定显示多少个月以及它们在控件中的排列方式。当更改月历尺寸时,控件的大小也会随之改变,因此应确保窗体上有足够的的控件供新尺寸使用。

实例:

private void Form1_Load(object sender, EventArgs e)
{
    //使控件在水平和垂直都显示2个月份
    monthCalendar1.CalendarDimensions = new Size(2, 2);
}

效果:
在这里插入图片描述
说明:CalendarDimensions 属性依次只显示一个日历年,并且最多可显示12个月。行和列的有小组和得到的最大乘积为12,对于大于12的值,将在最合适的基础上修改显示。

5.3 在MonthCalendar控件中以粗体显示特定日期

MonthCalendar控件能以粗体显示特殊的日期,或重复出现的日期,这样做可以引起对特殊日期的注意。可以使用AddBoldedDate方法在月历中添加以粗体显示的日期,并调用UpdateBoldedDates方法重绘粗体格式的日期以反映在粗体格式日期的列表中设置的日期。

实例:

private void Form1_Load(object sender, EventArgs e)
{
    //实例化DateTime类,使其值为2021年4月23日
    DateTime myVacation = new DateTime(2021, 4, 23);
    //将日期以粗体显示
    monthCalendar1.AddBoldedDate(myVacation);
    //重绘粗体格式日期
    monthCalendar1.UpdateBoldedDates();
}

效果:
在这里插入图片描述

5.4 在MonthCalendar控件中选择日期范围

如果在MonthCalendar控件中选择日期范围,必须设置SelectionStart和SelectionEnd属性。这俩个属性分别用于设置日期的起使和结束。

private void Form1_Load(object sender, EventArgs e)
{
    textBox1.Text = monthCalendar1.TodayDate.ToString();
}
private void monthCalendar1_DateChanged(object sender, DateRangeEventArgs e)
{
    textBox2.Text = monthCalendar1.SelectionStart.ToString();
    textBox3.Text = monthCalendar1.SelectionEnd.ToString();
}

效果:
在这里插入图片描述

6 其他高级控件

窗体中还包含其他高级控件,包括ErrorProvider控件、HelpProvider控件、Timer控件和ProgressBar控件。

6.1 使用ErrorProvider控件验证文本框输入

ErrorProvider控件可以在不打扰用户的情况下向用户显示有错误发生。当验证用户在窗体中的输入或显示数据集内的错误时,一般要用到该控件。
ErrorProvider控件通过SetError方法设置指定控件的错误描述字符串。
语法:

public void SetError(Control control,string value)
--control:要为其设置错误描述字符串的控件
--value:错误描述字符串

判断文本框中输入的数据是否准确,需要在控件的Validating事件中进行判断,然后设置ErrorProvider控件的错误描述字符串,当控件正在验证时会引发此事件。
如果将BlinkRate属性设置为零,BlinkStyle属性将自动被设置为NeverBlink。

实例:

private int a,b,c;
private void textBox1_Validating(object sender, CancelEventArgs e)
{
   if (textBox1.Text == "")
   {
       errorProvider1.SetError(textBox1, "不能为空");
   }
   else
   {
       errorProvider1.SetError(textBox1, "");
       a = 1;
   }
}
private void button1_Click(object sender, EventArgs e)
{
   if (a + b + c == 3)
   {
       MessageBox.Show("数据录入成功", "提示", MessageBoxButtons.OK, MessageBoxIcon.Warning);
   }
   else
   {
       MessageBox.Show("数据格式有问题不可保存", "警告", MessageBoxButtons.OK, MessageBoxIcon.Warning);
   }
}
private void button2_Click(object sender, EventArgs e)
{
   textBox1.Text = "";
   textBox2.Text = "";
   textBox3.Text = "";
}
private void textBox2_Validating(object sender, CancelEventArgs e)
{
   if (textBox2.Text == "")
   {
       errorProvider2.SetError(textBox2, "必不能为空");
   }
   else
   {
       try
       {
           //判断手否输入数字
           int x = Int32.Parse(textBox2.Text);
           errorProvider2.SetError(textBox2, "");
           b = 1;
       }
       catch (Exception)
       {

           errorProvider2.SetError(textBox2, "请输入数字");
       }
   }
}
private void textBox3_Validating(object sender, CancelEventArgs e)
{
   if (textBox3.Text == "")
   {
       errorProvider3.SetError(textBox3, "空的是不行的");
   }
   else
   {
       errorProvider3.SetError(textBox3, "");
       c = 1;
   }
}

效果:
在这里插入图片描述

6.2 使用HelpProvider控件调用帮助文档

HelpProvider控件可以将帮助文档(.html文件或.chm文件)与Windows应用程序相关联,为特定对话框或对话框中的特定控件提供区分上下文的帮助,打开帮助文件到特定部分。如目录、索引或搜索功能的主页。

通过设置控件的HelpNamespac属性以及SetShowHelp方法,实现当按F1键时打开指定的帮助文件功能。
如果没有使用HelpNamespac属性进行设置,则必须使用SetShowHelp方法提供帮助文本
语法:

public virtual string HelpNamespac {get; set;}
属性值:帮助文件的名称(HelpNamespac属性可以设置一个值,该值指定与HelpProvider对象关联的帮助文件名。)
public virtual void SetShowHelp(Control ctl,bool value)
ctl:控制其帮助信息已打开或关闭
value:如果显示控件的帮助信息则为true;否则为false

实例:

private void Form1_Load(object sender, EventArgs e)
{
    //F1调帮助文档
    string strPath = Application.StartupPath.Substring(0, Application.StartupPath.Substring(0, Application.StartupPath.LastIndexOf("\\")).LastIndexOf("\\"));
    strPath += @"\helpPage.html";
    helpProvider1.HelpNamespace = strPath;
    helpProvider1.SetShowHelp(this, true);
}

效果:
在这里插入图片描述

6.3 使用Timer控件设置时间间隔

Timer控件可以定期引发事件,此控件是为Windows窗体环境设计的。时间间隔的长度由Interval属性定义,其值以毫秒为单位。若启用了该组件,则每个时间间隔引发一个Tick事件,在Tick事件中添加要执行的代码。

语法:

--Interval 属性用于设置计时器开始计时的时间间隔
public int Interval {get ; set ;}
--属性值:计时器每次开始计时之间的毫秒数,该值不小于1

当指定的计时器间隔已过去而且计时器处于启动状态时会引发控件的Tick事件。Enabled属性用于设置是否启用计时器。

public virtual bool Enabled {get ; set ;}
--属性值:如果计时器当前处于启用状态,则为true;否则为false。默认为false。

实例:

private void Form1_Load(object sender, EventArgs e)
{
    timer1.Interval = 100;
}
private void button1_Click(object sender, EventArgs e)
{
    if (button1.Text == "开始")
    {
        timer1.Enabled = true;
        button1.Text = "停止";
    }
    else
    {
        timer1.Enabled = false;
        button1.Text = "开始";
    }
}
private void timer1_Tick(object sender, EventArgs e)
{
    textBox1.Text = DateTime.Now.ToString();
}

效果:
在这里插入图片描述

6.4 使用ProgressBar控件显示程序运行进度条

ProgressBar控件通过水平放置的方框中显示适当数目的矩形,指示工作的进度。工作完成时,进度条被填满。进度条用于帮用户了解等待一项工作完成的进度。
ProgressBar控件比较重要的属性有Value、Mininum和Maxinum。Mininum和Maxinum属性主要用于设置进度条的最大值和最小值,Value属性表示操作过程中已经完成的进度。而控件的Step属性用于指定Value属性递增的值,然后调用PerformStep方法来递增该值。
注意:
ProgressBar控件只能以水平方式显示,如果想改变该控件的样式,可以用ProgressBarRenderer类来实现,如纵向进度条,或在进度条上显示文本。

实例:

private void button1_Click(object sender, EventArgs e)
{
    button1.Enabled = false;
    progressBar1.Maximum = 50000;
    progressBar1.Minimum = 0;
    progressBar1.Step = 1;
    for (int i = 0; i < 50000; i++)
    {
        progressBar1.PerformStep();
        textBox1.Text = "当前进度值:" + progressBar1.Value.ToString();
    }
}

效果:

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值