【WinForm详细教程二】WinForm中的ComboBox、CheckedListBox、DateTimePicker和MonthCalender、MaskedTextBox控件

1.ComboBox

  • ComboBox 是一个下拉框(组合框)控件。
  • 只允许用户选择一个选项。

常用属性

  • Name: 控件名称
  • DropDownStyle: 下拉样式(DropDown、DropDownList、Simple)
  • Items: 选项集合
  • DataSource: 数据源
  • DisplayMember: 显示的数据字段
  • ValueMember: 实际值的数据字段

Items 方法

  • 与 ListBox 相似,可以进行添加、删除和清空操作。

** 事件**

  • SelectedIndexChanged: 当选中项发生变化时触发。

数据绑定

  • 使用 DataSourceDisplayMemberValueMember 进行数据绑定。

简单案例

创建一个 Person 类:

public class UserInfo
{
    public string Name { get; set; }
    public int ID { get; set; }
}

下面是如何使用这个类来填充 ComboBox 的一个例子。

代码

public partial class frmComboBox : Form
{
    public frmComboBox()
    {
        InitializeComponent();
        List<UserInfo> list = new List<UserInfo>();
        list.Add(new UserInfo
                 {
                     Name = "智能建造小硕",
                     ID = 0
                 });
        list.Add(new UserInfo()
                 {
                     ID = 1,
                     Name = "admin"
                 });
        list.Add(new UserInfo()
                 {
                     ID = 2,
                     Name = "lycchun"
                 });
        list.Add(new UserInfo()
                 {
                     ID = 3,
                     Name = "lwb"
                 });
        list.Add(new UserInfo()
                 {
                     ID = 4,
                     Name = "Eleven"
                 });
        list.Add(new UserInfo()
                 {
                     ID = 5,
                     Name = "Jason"
                 });

        cobName.DataSource = list;
        cobName.ValueMember = "ID";
        cobName.DisplayMember = "Name";

        //注册事件
        cobName.SelectedIndexChanged += comboBox1_SelectedIndexChanged;
    }

    private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
    {
       MessageBox.Show("选中了:" + (cobName.SelectedItem as UserInfo).Name, "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
    }
}

效果展示

在这里插入图片描述

2.CheckedListBox

  • CheckedListBox是用于显示项列表的控件,类似于ListBox。
  • 区别在于,每个项前都有一个复选框,用户可以选择多个项。
  • 这对于需要多选操作的场景非常有用。

属性:

  • CheckOnClick: 这是一个布尔属性,如果设置为True,那么当用户单击项时,复选框将立即切换其选中状态。如果设置为False,则用户需要单击复选框才能更改选中状态。

方法和属性:

  • Items:

    CheckedListBox控件的Items属性用于管理其中的项。

    • Add方法: 可以使用Add方法向CheckedListBox添加项。
    • DataSource: 如果你有一个数据源,可以将其分配给DataSource属性,以便动态填充CheckedListBox。
    • DisplayMember: 当使用数据源时,DisplayMember属性定义了在项中显示的文本字段。
    • ValueMember: 如果需要存储与每个项关联的值,可以使用ValueMember属性指定关联的值字段。

事件:

  • SelectedIndexChanged: 当用户选择了不同的项时,将触发SelectedIndexChanged事件。这是一个常用的事件,可用于响应用户的选择操作。
  • ItemCheck: 当项的选中状态更改时(不一定是由用户引发的),ItemCheck事件将被触发。这可以用于在更改发生前执行某些自定义逻辑。

简单案例

  public partial class frmCheckedListBox : Form
  {
      public frmCheckedListBox()
      {
          InitializeComponent();
      }

      private void frmCheckedListBox_Load(object sender, EventArgs e)
      {
          直接添加项
          //cklLList.Items.Clear();
          //cklLList.Items.Add(1);
          //cklLList.Items.Add("aaa");
          //cklLList.Items.AddRange(new string[] { "aaa", "bbb", "ccc" });
          //cklLList.Items.Insert(2, "ddd");
          //cklLList.Items.Remove("ddd");
          //cklLList.Items.RemoveAt(2);//移除第3项

          List<UserInfo> list = new List<UserInfo>();
          list.Add(new UserInfo()
          {
              ID = 1,
              Name = "admin"
          });
          list.Add(new UserInfo()
          {
              ID = 2,
              Name = "lycchun"
          });
          list.Add(new UserInfo()
          {
              ID = 3,
              Name = "lwb"
          });
          list.Add(new UserInfo()
          {
              ID = 4,
              Name = "Eleven"
          });
          list.Add(new UserInfo()
          {
              ID = 5,
              Name = "Jason"
          });
          //当指定 了DataSource,是不可以修改Items集合的
          cklLList.DataSource = list;
          cklLList.DisplayMember = "Name";
          cklLList.ValueMember = "Id";
          //cklLList.Items.RemoveAt(4);
          //勾选或选择项的获取
          //cklLList.CheckedIndices
          //cklLList.CheckedItems
          //cklLList.SelectedIndices
          //cklLList.SelectedItems
          //cklLList.SelectedIndex
      }
  }

效果展示
在这里插入图片描述

3.DateTimePicker和MonthCalender控件

3.1DateTimePicker

日期时间控件(DateTimePicker)是用于选择日期和/或时间的控件。它允许用户从日历中选择日期,或者从下拉列表中选择时间,具体取决于其设置。

属性:

  • Value: 这是日期时间控件当前所选的日期和时间值。你可以使用这个属性来获取或设置控件的值。
  • Text: Text属性用于获取或设置日期时间控件上显示的文本。通常,它会显示Value属性中的日期和时间。
  • Format: Format属性用于指定日期时间控件的显示格式。它有几个选项:
    • Custom: 使用自定义日期时间格式,需要配置CustomFormat属性。
    • Long: 显示完整的日期和时间。
    • Short: 显示较短的日期和时间。
  • CustomFormat: 当Format属性设置为Custom时,CustomFormat属性用于指定自定义的日期时间格式。例如,你可以设置它为"yyyy-MM-dd HH:mm:ss"来显示年、月、日、小时、分钟和秒。
  • ShowCheckBox: 这是一个布尔属性,如果设置为True,则在日期时间控件旁边显示一个复选框。用户可以使用复选框来启用或禁用日期时间选择。
  • ShowUpDown: 这也是一个布尔属性,如果设置为True,则在日期时间控件旁边显示上下箭头按钮,用户可以使用这些按钮来增加或减少日期时间的值。

事件:

  • ValueChanged: 当用户更改了日期时间控件的值时,将触发ValueChanged事件。这是一个常用的事件,通常用于在值更改后执行某些操作。

3.2 MonthCalender

月历控件(MonthCalendar)是用于选择日期的控件,通常以整个月份的日历形式显示日期。用户可以通过单击日期来选择日期。

属性:

  • FirstDayOfWeek: 这是一个枚举属性,用于指定每周的第一天是哪一天。默认情况下,它通常设置为周日,但你可以将其更改为周一或其他任何适合你的选项。
  • MaxSelectionCount: 这是一个整数属性,用于限制用户可以选择的日期的数量。你可以将其设置为1,以确保用户只能选择单个日期,或者将其设置为大于1的值,以允许选择多个日期。
  • ShowWeekNumbers: 这是一个布尔属性,如果设置为True,则在月历控件中显示每周的周数。
  • ShowToday: 这是一个布尔属性,如果设置为True,则在月历控件中突出显示当天的日期。

事件:

  • DateChanged: 当用户选择的日期或日期范围发生改变时,将触发DateChanged事件。这是一个常用的事件,通常用于在用户选择日期时执行某些操作。

3.3 案例

代码示例

public partial class frmTime : Form
{
    public frmTime()
    {
        InitializeComponent();
    }
    private void frmTime_Load(object sender, EventArgs e)
    {
        // 设置日期时间控件的显示格式为长日期
        dateTimePicker1.Format = DateTimePickerFormat.Long;
        // 启用复选框,允许用户禁用日期时间选择
        dateTimePicker1.ShowCheckBox = true;
        // 不显示上下箭头按钮
        dateTimePicker1.ShowUpDown = false;

        // 设置每周的第一天为周一
        monthCalendar1.FirstDayOfWeek = Day.Monday;
        // 设置允许选择多个日期
        monthCalendar1.MaxSelectionCount = 10;
        // 显示每周的周数
        monthCalendar1.ShowWeekNumbers = true;
        // 突出显示当天的日期
        monthCalendar1.ShowToday = true;
    }
    private void dateTimePicker1_ValueChanged(object sender, EventArgs e)
    {
        // 当日期时间控件的值更改时,将新值显示在Label中
        label2.Text = "选择的日期时间是:" + dateTimePicker1.Value.ToString();
    }
    private void monthCalendar1_DateChanged(object sender, DateRangeEventArgs e)
    {
        // 当用户选择的日期范围发生改变时,将新的日期范围显示在Label中
        label1.Text = "选择的日期范围是:" + e.Start.ToShortDateString() + " 到 " + e.End.ToShortDateString();
    }
}

效果

在这里插入图片描述

4.MaskedTextBox

MaskedTextBox 控件基于掩码来验证和格式化用户输入。掩码是一个字符串,其中每个字符都表示一个特定的输入要求。以下是一些常见的掩码代号及其含义:

  • 0:表示 0 到 9 之间的任何一个数字(使用 * 作为占位符)。
  • 9:表示数字或空格。
  • #:表示数字、加号或减号。
  • L:表示 ASCII 字母(使用 * 作为占位符)。
  • &:表示任何字符。
  • C:表示字符。
  • A:表示字母。

在这里插入图片描述

属性:

  • Name:控件的名称。
  • BeepOnError:如果设置为 true,当输入不符合掩码规则时,会发出蜂鸣声。
  • Mask:掩码字符串,用于规定输入的格式。
  • PasswordChar:指定一个字符,用于替代输入的字符,例如用于密码输入。
  • PromptChar:指定掩码中的占位符字符。
  • RejectInputOnFirstFailure:如果设置为 true,当输入不符合掩码规则的第一个字符时,会拒绝输入。
  • Text:控件中显示的文本。
  • TextMaskFormat:指定控件文本的显示格式。
  • CutCopyMaskFormat:指定剪切和复制操作的格式。

事件:

  • MaskChanged:在掩码发生变化时触发的事件。
  • MaskInputRejected:当用户输入被拒绝时触发的事件。

使用示例:

使用 MaskedTextBox 控件来输入电话号码,使用 (###) ###-#### 的格式。以下是一个示例:

 public partial class FrmMaskedTextBox : Form
 {
     public FrmMaskedTextBox()
     {
         InitializeComponent();
     }
     private void FrmMaskedTextBox_Load(object sender, EventArgs e)
     {
         maskedTextBox1.BeepOnError = true;//输入错误提示音
         // 设置掩码为电话号码格式
         maskedTextBox1.Mask = "(999) 000-0000";
         // 设置 PromptChar 为一个空格,以便在用户输入时自动填充占位符
         maskedTextBox1.PromptChar = ' ';
     }
     private void maskedTextBox1_MaskInputRejected(object sender, MaskInputRejectedEventArgs e)
     {
         if (e.Position < 0)
         {
             MessageBox.Show("输入不足以满足格式要求", "警告", MessageBoxButtons.OK, MessageBoxIcon.Warning);
         }
         else
         {
             MessageBox.Show("无效字符位于 " + e.Position + " 位置", "警告", MessageBoxButtons.OK, MessageBoxIcon.Warning);
         }
     }
 }

效果
在这里插入图片描述

【WinForm详细教程】源代码获取方式:
在这里插入图片描述
精彩推荐:
【C#进阶一】C#中的数组(Array)、集合(ArrayList,Queue,Stack, HashList)、List<T>、字典(Dictionary<K,T>)和双向链表LinkedList
【C#进阶八】C#中的序列化与反序列化下(二进制序列化、XML序列化及JSON序列化)

【C#进阶】C#语法中一些常用知识点总结
【WinForm详细教程一】WinForm中的窗体、Label、TextBox及Button控件、RadioButton和CheckBox、ListBox
【WinForm详细教程三】WinForm中的NumericUpDown、PictureBox、RichTextBox及三种Timer控件
【WinForm详细教程四】WinForm中的ProgressBar 、ImageList和ListView控件
【WinForm详细教程五】WinForm中的MenuStrip 、ContextMenuStrip 、ToolStrip、StatusStrip控件
【WinForm详细教程六】WinForm中的GroupBox和Panel 、TabControl 、SplitContainer控件
【C#进阶】C#中的委托、事件、回调函数、匿名函数和lambda表达式

如果你对智能建造专业感兴趣,或者是相关方向的学生,老师或者从业人员,欢迎通过微信公众号【智能建造小硕】加入我们!

在这里插入图片描述
希望有所帮助,同时欢迎关注我们,后面将更新更多相关内容!

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

智能建造小硕

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值