C# Winform编程自学笔记(七),上接第(六)篇
个人实践代码(仅供参考)【(六)+(七)】:
链接:https://pan.baidu.com/s/1Dc2MeSyR6u6IXjhINuuYJQ
提取码:wu4f
内容一览
- 可选列表框控件 CheckedListBox;
- 微调按钮控件 numericUpDown;
- 日历控件 monthCalender;
- 日期控件 dateTimePicker;
——————正文——————
(一)可选列表框控件 CheckedListBox
CheckedBox类似于ListBox和CheckBox的综合体,允许用户在ListBox内有选择地挑选具体内容实现;
实践案例一:
1)从工具箱中拖放三个CheckedListBox控件和四个Button控件,如图进行排列,当单击左右移动的符号按钮时,左右两侧的数据信息将按照客户意图进行移动,而移动信息将显示在下面的CheckedListBox控件中。
2)具体实现的代码如下:
也可以直接选择复选框旁边的小三角进行编辑项而后添加内容
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 Form6 : Form
{
public Form6()
{
InitializeComponent();
}
private void Form6_Load(object sender, EventArgs e)
{
//checkedListBox1.Items.Add("星期一");向复选框添加内容
}
private void checkedListBox1_SelectedIndexChanged(object sender, EventArgs e)
{
}
private void button1_Click(object sender, EventArgs e)
{
foreach(object o in checkedListBox1.CheckedItems)
{
checkedListBox2.Items.Add(o);
}
for(int i=0;i<checkedListBox1.Items.Count;i++)
{
if(checkedListBox1.CheckedItems.Contains(checkedListBox1.Items[i]))
{
checkedListBox3.Items.Add(checkedListBox1.Items[i].ToString() + "被移至右侧");
checkedListBox1.Items.Remove(checkedListBox1.Items[i]);
}
}
}
private void button2_Click(object sender, EventArgs e)
{
foreach(object o in checkedListBox1.Items)
{
checkedListBox2.Items.Clear();
checkedListBox3.Items.Add("左侧全部移动到右侧");
}
}
private void button3_Click(object sender, EventArgs e)
{
foreach(object o in checkedListBox2.CheckedItems)
{
checkedListBox1.Items.Add(o);
}
for(int i=0;i<checkedListBox2.Items.Count;i++)
{
if(checkedListBox2.CheckedItems.Contains(checkedListBox2.Items[i]))
{
checkedListBox3.Items.Add(checkedListBox1.Items[i].ToString() + "被移动到左侧");
checkedListBox2.Items.Remove(checkedListBox2.Items[i]);
}
}
}
private void button4_Click(object sender, EventArgs e)
{
foreach(object o in checkedListBox2.Items)
{
checkedListBox1.Items.Clear();
checkedListBox3.Items.Add("右侧全部移动到左侧");
}
}
}
}
实验结果:
3)如上练习有一个问题,那就是必须单击星期信息两次才可以选中;另外选择多项信息后,会发现左侧信息无法移除干净。
4)错误产生的原因是在删除左侧勾选信息的时候出错,所以在循环体中做出更改如下:
private void button1_Click(object sender, EventArgs e)
{
foreach(object o in checkedListBox1.CheckedItems)
{
checkedListBox2.Items.Add(o);
}
for (int i = checkedListBox1.Items.Count - 1;i>=0 ; i--)
{
if (checkedListBox1.CheckedItems.Contains(checkedListBox1.Items[i]))
{
checkedListBox3.Items.Add(checkedListBox1.Items[i].ToString() + "被移至左侧");
checkedListBox1.Items.Remove(checkedListBox1.Items[i]);
}
}
}
(二)微调按钮控件 numericUpDown
微调按钮控件看起来像是文本框和一组箭头的组合,用户可以通过单击向上和向下的箭头按钮,增大或减小参数值。
实践案例:
1)从工具箱拖拽一个numericUpDown控件,一个Button控件,一个pictureBox控件和一个Timer控件,如下图进行布局;
2)设置Timer控件的Enable属性为True,分别上机Button和Timer编写如下代码:
private void button1_Click(object sender, EventArgs e)
{
timer1.Interval = Convert.ToInt32(numericUpDown1.Value);//获取微调按钮的值
timer1.Start();
}
private void timer1_Tick(object sender, EventArgs e)
{
pictureBox1.Left -= 5;
if(pictureBox1.Right<0)
{
pictureBox1.Left = this.Width;
}
}
实验结果:
值得一提的是,复选框的默认值是在它的Value属性中进行设定的。
(三)日历控件 monthCalender;
MonthCalender为用户查看和设置日期提供了一个直观的图形界面。
实践案例:
1)从工具箱拖拽一个monthCalender控件,三个ComboBox控件和若干Label标签,如图进行布局:
2)以下是具体实现功能的代码:
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 Form8 : Form
{
public Form8()
{
InitializeComponent();
}
private void label4_Click(object sender, EventArgs e)
{
}
private void Form8_Load(object sender, EventArgs e)
{
label5.Text = "今天是: " + monthCalendar1.TodayDate.ToString();
//只要月历控件的事件发生变化,label1就会跟着变化
label6.Text = " ";
//label7.Text = " ";
label8.Text = " ";
label9.Text = " ";
//label10.Text = " ";
}
//双击月历进入下面这个函数
private void monthCalendar1_DateChanged(object sender, DateRangeEventArgs e)
{
label6.Text = "起始日期: " + monthCalendar1.SelectionStart.ToString();
label9.Text = "结束日期" + monthCalendar1.SelectionEnd.ToString();
}
private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
{
if(comboBox1.SelectedIndex>=0)
{
int i = comboBox1.SelectedIndex;
switch(i)
{
case 0:
monthCalendar1.TitleBackColor = System.Drawing.Color.Red;
break;
case 1:
monthCalendar1.TitleBackColor = System.Drawing.Color.Yellow;
break;
case 2:
monthCalendar1.TitleBackColor = System.Drawing.Color.Blue;
break;
case 3:
monthCalendar1.TitleBackColor = System.Drawing.Color.Green;
break;
}
}
}
private void comboBox2_SelectedIndexChanged(object sender, EventArgs e)
{
if (comboBox2.SelectedIndex >= 0)
{
int i = comboBox2.SelectedIndex;
switch (i)
{
case 0:
monthCalendar1.TrailingForeColor = System.Drawing.Color.Red;
break;
case 1:
monthCalendar1.TrailingForeColor = System.Drawing.Color.Yellow;
break;
case 2:
monthCalendar1.TrailingForeColor = System.Drawing.Color.Blue;
break;
case 3:
monthCalendar1.TrailingForeColor = System.Drawing.Color.Green;
break;
}
}
}
private void comboBox3_SelectedIndexChanged(object sender, EventArgs e)
{
if (comboBox3.SelectedIndex >= 0)
{
int i = comboBox3.SelectedIndex;
switch (i)
{
case 0:
monthCalendar1.TitleForeColor = System.Drawing.Color.Red;
break;
case 1:
monthCalendar1.TitleForeColor = System.Drawing.Color.Yellow;
break;
case 2:
monthCalendar1.TitleForeColor = System.Drawing.Color.Blue;
break;
case 3:
monthCalendar1.TitleForeColor = System.Drawing.Color.Green;
break;
}
}
}
}
}
实验结果:
(四)用户选择日期控件 DataTimePicker
如果希望应用程序能够使用户可以选择日期和时间,并以指定的格式显示日期和时间,可以选择使用该控件。与monthCalendar不同,该控件只能选择一个时间段。
实践说明:
1)从工具箱拖拽两个DataTimePicker控件和若干Label控件,如图进行布局:
2)具体实现代码为:
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 Form9 : Form
{
public Form9()
{
InitializeComponent();
}
private void Form9_Load(object sender, EventArgs e)
{
label3.Text = "选择日期是本年度第" + dateTimePicker1.Value.DayOfYear.ToString() + "天";
label4.Text = "选择日期是本周" + dateTimePicker1.Value.DayOfWeek.ToString();
label5.Text = "两个日期的差值是:" + Convert.ToString(dateTimePicker2.Value.DayOfYear - dateTimePicker1.Value.DayOfYear) + "天";
}
private void dateTimePicker1_ValueChanged(object sender, EventArgs e)
{
label5.Text = "两个日期的差值是:" + Convert.ToString(dateTimePicker2.Value.DayOfYear - dateTimePicker1.Value.DayOfYear) + "天";
}
private void dateTimePicker2_ValueChanged(object sender, EventArgs e)
{
label5.Text = "两个日期的差值是:" + Convert.ToString(dateTimePicker2.Value.DayOfYear - dateTimePicker1.Value.DayOfYear) + "天";
}
}
}
实验结果:
零散笔记
1.如何从dataTimePicker获取一个日期是一年的第几天?
见上文代码:dateTimePIcker1.Value.DayofYear.ToString();
2.如何从dateTimePicker获取某天为一年的第几周?
见上文代码:dateTimePicker1.Value.DayofWeek.ToString();
3.求两个日期之间的差值:
见上文代码:Convert.ToString(dateTimePIcker2.Value.DayofYear-dateTimePicker1.Value.DayofYear