使用“名称”和“值”填充组合框
本文关键字:组合 填充 名称 使用 | 更新日期: 2023-09-27 17:56:37
我有一个combobox
列出了一些单字节cmd,可以发送到我开发的一些自定义硬件。 使用下面的 C# 代码,用户当前只能按名称从cbCANcmd
中选择命令。 我还找到了仅显示值的方法,但更喜欢同时显示名称和数字。
- 如何在 cb 下拉列表中同时显示十六进制值和
cmd
值?0d - CommsSoftReset
- 并且仍然能够为未列出的命令键入
un-enumerated
值,例如05
? - 我是否可以轻松隐藏更危险的物品(即
09-WipeAllFlash
),但仍然按照上面的 #2 以数字方式输入它们?
注意:枚举来自直接的 C 语言 .h 文件,标头每天更改的次数比 c# 应用多。 出于这个原因,我希望避免为每个值添加[Description()]
,或大幅更改格式,因为随着我们继续开发,它将不得不多次复制和重做)
附言我通常只用简单的 C 编写,用于接收这些命令的 8 位微。由于这是我的第一个 c# 测试应用程序,请温和:)
enum COMMS_MESSAGE_ID_t : byte
{
CommsRAMRead = 0x00,
CommsRAMWrite = 0x01,
CommsCommitRAMbufferToFlash = 0x02,
CommsWipeAllFlash = 0x0c,
CommsSoftReset = 0x0d,
CommsGetVersion = 0xff
}
private void SendTab_Enter(object sender, EventArgs e)
{
//need to populate the pulldowns with the available commands
cbCANcmd.DataSource = Enum.GetValues(typeof(COMMS_MESSAGE_ID_t));
}
private void SendDownlinkCmd_Click(object sender, EventArgs e)
{
// send the command selected in the send tab's combobox
byte CANcmd = (byte)(COMMS_MESSAGE_ID_t)cbCANcmd.SelectedValue;//first byte
}
如果这是一个 WinForms 应用程序,下面是 #1 的可能解决方案。如果这行得通,我们可以从那里继续前进。
public partial class Form1 : Form
{
private void Form1_Load(object sender, EventArgs e)
{
foreach (var val in Enum.GetNames(typeof(COMMS_MESSAGE_ID_t)))
{
cbCANcmd.Items.Add(new CommsMessage(val));
}
}
}
public class CommsMessage
{
public string Name { get; set; }
public COMMS_MESSAGE_ID_t Message { get; set; }
public CommsMessage(string msgName)
{
Name = msgName;
Message = (COMMS_MESSAGE_ID_t)Enum.Parse(typeof (COMMS_MESSAGE_ID_t), msgName);
}
public override string ToString()
{
return string.Format("{0:x} - {1}", Message, Name);
}
}
然后,每当获取 ComboBox.SelectedItem 的值时,都可以执行以下操作:
COMMS_MESSAGE_ID_t msg = (cbCANcmd.SelectedItem as CommsMessage).Message;
我省略了很多您可能应该做的异常处理,但我希望这会有所帮助。