C# Winform编程自学笔记(七)

C# Winform编程自学笔记(七),上接第(六)篇
个人实践代码(仅供参考)【(六)+(七)】:
链接:https://pan.baidu.com/s/1Dc2MeSyR6u6IXjhINuuYJQ
提取码:wu4f

内容一览

  1. 可选列表框控件 CheckedListBox;
  2. 微调按钮控件 numericUpDown;
  3. 日历控件 monthCalender;
  4. 日期控件 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

猜你喜欢

转载自blog.csdn.net/Cambridge26/article/details/105425438