[C# WinForm] 如何讓 ComboBox 也能設定值 (Value) 與名稱 (Text)

[C# WinForm] 如何讓 ComboBox 也能設定值 (Value) 與名稱 (Text)

在 WinForm 原始的 ComboBox 下拉中,只能設定單一的值,輸入什麼值,就會看到什麼值。而我們在 WebForm 建立下拉 (DropDownList) 物件時,可以設定值 (Value) 與名稱 (Text)。我們習慣顯示使用者看的懂的名稱,而背後傳遞代碼到後台。本文將會教你如何讓 WinForm ComboBox 也能設定值 (Value) 與名稱 (Text)

以前在使用 WinForm ComboBox 時,它並沒有值 (Value) 與名稱 (Text) 區別的概念,我們也就這樣設計畫面了,在 ComboBox 的屬性「items」集合中設定什麼值就出現什麼值。

所看到的畫面。

如果我們的資料有值與名稱的分別,例如:
1:C#
2:Java
3:PHP
4:Python

想要讓使用者下拉一樣看到 “C#” ,而得到的值為 “1”,那要怎麼做呢?

除了介紹值與名稱的使用方法,還會額外提供索引取值、移除項目、DataTable 綁定內容等方法。



建立新類別: ComboBoxItem

此類別是讓 ComboBox 下拉內容放入此物件,就可以有值 (Value) 與名稱 (Text) 的區別。

建立新類別: ComboUtil

此類別是操作 ComboBox 執行設定值、取值、刪除等共用方法。



新下拉使用方法說明

上面建立了新類別,這裡就介紹一下有哪些使用方式。

我在 Form 建立一個 ComboBox,ID 為 “comboBox1”。

增加下拉項目

在 Form_Load 初始畫面,增加 ComboBox 可選擇的項目。

運行後看到的畫面,只會出現名稱部份。

取得下拉項目

新建一個 Button 來執行語法。
呼叫 GetItem() 方法,目前下拉停在 “C#”,取得 “C#” 的值,結果是 “1”。

設定下拉值

呼叫 SetItemValue() 方法,傳入值為 “2”,將下拉顯示值為 “2” 的名稱,結果是 “Java”。

取得索引下拉項目

下拉物件沒有被選擇,也可以直接傳入索引值,來取得名稱。
呼叫 GetItem() 方法,傳入索引值 2,取得索引值 2 的名稱,顯示結果為 “PHP”。

移除下拉項目

呼叫 RemoveItem() 方法,傳入值為 “4” (名稱是 “Python”),執行後,下拉就會看不到 “Python”。

DataTable 綁定下拉項目

這個做法是仿照 WebForm 的方法,將 DataTable 的欄位,綁定到 DropDownList 裡面,類似以下這語法。

這裡我也建立一個 DataTable ,然後呼叫 BindTableToDDL() 方法,將指定欄位 “Code 和 “Name” 名稱來綁定下拉項目。

相關學習文章

如果你在學習上有不懂的地方,需要諮詢服務,可以參考站長服務,我想辨法解決你的問題
如果文章內容有過時、不適用或錯誤的地方,幫我在下方留言通知我一下,謝謝

加入社團一起討論

關注我的 IG

4 thoughts on “[C# WinForm] 如何讓 ComboBox 也能設定值 (Value) 與名稱 (Text)

  1. Mars您好:
    我是剛學習C#的新手,不好意思想請問「public class ComboBoxItem」這一段程式碼該寫在哪裡呢?我看我的Form.cs裡面開頭好像都不是public class,而且大多是private類型,可否麻煩您指點一下呢?非常謝謝您

    1. 這是新類別,你可以建一個檔案叫 ComboBoxItem.cs 就可以了,檔案位置都可以,你不熟可以先放主目錄就好

  2. 要怎麼給予下拉式選單一個值,來讓程式知道現在要執行哪一個選項的內容

    1. 你要的語法,增加值、取值、設定值,我範例內都有,
      還是你要的不是這些?

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *

fifteen + 5 =


The reCAPTCHA verification period has expired. Please reload the page.