C#将枚举导入到下拉框ComboBox,并将下拉选择的枚举内容转换成枚举

   最近的上位机开发工作中为了方便对下拉框中的选项动态增加,减少工作量所以想到用枚举来作为选项,并将下拉框中选择的内容转成枚举用于程序运行使用。这里以我正在做的一个兼容读取多种CAN通讯报文的程序的一部分作为例子讲解。

一、使用的环境

开发工具:Visual Studio 2022

用户界面框架:winform

框架版本:.NET Framework 4.8

二、具体操作

1、新建一个winform项目,在窗口中增加一个用于示例的ComboBox下拉框控件,这我的下拉框控件的name修改为:cbx_canFileType


 

2、定义一个用于作为下拉框选项内容的枚举

 public enum EmCanFileType
        {
            PCAN_Explorer_CAN,
            PCAN_view_CAN,
            周立功_CAN,
            CANoe_CAN,
        }

  枚举中的每一项的文字,会作为下拉框选项的文本显示在下拉框待选内容中。但因为枚举自身的原因,直接写的枚举项部分字符是无法使用的,如横杠“-”、顿号“、”等。

3、新建窗口的加载事件

  在点击选中窗体本身后,在它闪电⚡标识处下拉寻找它的load事件,在它后面的空白处双击即可添加默认事件函数。

load事件:在窗体显示前加载窗体资源时,触发并可以进行操作的事件

4、将枚举内容导入到控件

代码如下:

 private void Form1_Load(object sender, EventArgs e)
        {
            //清除下拉框内容(以免有脏数据)
            cbx_canFileType.Items.Clear();
            //将枚举内容导入到下拉框的items待选内容中
            cbx_canFileType.Items.AddRange(Enum.GetNames(typeof(EmCanFileType)));
            //设置下拉框的默认显示为指定枚举的一个内容
            cbx_canFileType.SelectedIndex = (int)EmCanFileType.PCAN_Explorer_CAN;
        }

显示效果如下:

5、获取当前文本框的内容,并转为枚举类型

 EmCanFileType fileType = (EmCanFileType)cbx_canFileType.SelectedIndex;

  因为枚举自带索引值,在枚举项导入下拉框的时候,下拉框中的内容索引值和枚举项的索引值是一致的,所以可以通过下拉框的索引值int 直接转换成枚举。

  • 7
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
C# 将 ListBox 控件嵌入到 ComboBox下拉框,可以通过以下步骤实现覆盖 ComboBox 下拉框: 1. 将 ComboBox 控件的 DrawMode 属性设置为 OwnerDrawFixed。 2. 在 ComboBox 控件的 DropDown 事件添加以下代码: ``` private void comboBox1_DropDown(object sender, EventArgs e) { // 创建 ListBox 控件 ListBox listBox = new ListBox(); // 设置 ListBox 控件的属性 listBox.Items.Add("Item 1"); listBox.Items.Add("Item 2"); listBox.Items.Add("Item 3"); listBox.Dock = DockStyle.Fill; // 将 ListBox 控件添加到 ComboBox下拉框 comboBox1.Controls.Add(listBox); } ``` 3. 在 ComboBox 控件的 DrawItem 事件添加以下代码: ``` private void comboBox1_DrawItem(object sender, DrawItemEventArgs e) { // 只处理 ComboBox下拉框的项 if (e.Index < 0) { return; } // 获取 ComboBox 的 Graphics 对象 Graphics g = e.Graphics; // 获取 ComboBox 的绘制区域 Rectangle bounds = e.Bounds; // 如果当前项被选,则绘制背景颜色 if ((e.State & DrawItemState.Selected) == DrawItemState.Selected) { g.FillRectangle(Brushes.LightBlue, bounds); } else { g.FillRectangle(Brushes.White, bounds); } // 获取当前项的文本 string text = comboBox1.Items[e.Index].ToString(); // 设置字体和颜色 Font font = new Font(comboBox1.Font, FontStyle.Regular); Color color = Color.Black; // 绘制文本 g.DrawString(text, font, new SolidBrush(color), bounds.X, bounds.Y); // 如果当前项被选,则绘制 ListBox 控件 if ((e.State & DrawItemState.Selected) == DrawItemState.Selected) { // 获取 ListBox 控件 ListBox listBox = (ListBox)comboBox1.Controls[0]; // 绘制 ListBox 控件 listBox.Location = new Point(bounds.X, bounds.Y + bounds.Height); listBox.Visible = true; } else { // 隐藏 ListBox 控件 ListBox listBox = (ListBox)comboBox1.Controls[0]; listBox.Visible = false; } } ``` 这样,当用户点击 ComboBox下拉框时,就会显示一个覆盖 ComboBox 下拉框的 ListBox 控件,用户可以通过 ListBox 控件来选择项。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值