1
我有一個combobox
列出了一些可以發送到我開發的一些自定義硬件的單字節cmds。使用下面的C#代碼,用戶當前可以僅按名稱從cbCANcmd
中選擇命令。我還找到了只顯示數值的方法,但更喜歡顯示名稱和數字。使用名稱和值填充組合框,
- 如何在cb下拉菜單中顯示十六進制值&
cmd
?例如0d - CommsSoftReset
- 對於未列出的命令,仍然能夠輸入
un-enumerated
的值,例如05
? - 我可以很容易地隱藏更多危險物品(即
09-WipeAllFlash
),但仍然按照上述#2的數字輸入它們嗎?
注意:enum來自一個直接的C語言.h文件,並且標題每天更改的次數多於c#應用程序。出於這個原因,我希望避免爲每個值添加[Description()]
,或者大幅改變格式,因爲在我們繼續開發時它將不得不被複制和重做多次)
P.S.我通常只寫簡單的C,對8位微接收這些commands..As這是在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
}
This Works。謝謝!我不得不將'公開部分Form1Load'中的代碼移動到我的'私人Form1Load',但不知道爲什麼。讓我開始,雖然我的代表允許,並會upvote。 – user3496191
酷!很高興它對你有效!如果要處理#2(不在枚舉中的值),只需向CommsMessage中添加一個構造函數,該構造函數接受一個字節(以及可選的字符串,用於名稱)。對於#3,最簡單的方法是保存一個「危險」命令列表,並在向ComboBox添加項時將其過濾掉。就個人而言,我會從app.config或Settings中管理這些「危險命令」,因此您可以添加或刪除它們而無需重新編譯。 – t3sture