HOWTO · Csharp
如何在 C# 中獲取 ComboBox 的選定值
學習如何在 C# 中從 Windows Forms ComboBox 讀取選定項目、顯示文字或繫結值。
本頁內容
在 Windows Forms ComboBox 中,「選定值」可以指三件不同的事:選定項目物件、為該項目顯示的文字,或者其資料繫結值。當你需要物件時讀取 ComboBox.SelectedItem,當你需要其顯示文字時使用 ComboBox.GetItemText,當控制項已繫結且你需要由 ValueMember 設定的欄位時讀取 SelectedValue。這些範例假設控制項已經位於表單上,並展示了從按鈕按一下處理常式中讀取選取的過程。
下面的範例面向 Windows Forms 應用程式。本文未提供執行階段執行證據,因此它們以未執行的、Windows 專用範例的形式呈現;不聲稱任何主控台輸出。
使用 ComboBox.SelectedItem 屬性在 C# 中獲取 ComboBox 的選定值
ComboBox.SelectedItem 是一個屬性,用於取得或設定清單中目前選定的物件。它並不總是傳回字串:當項目是自訂物件時,結果就是該物件。僅當應用程式需要的是該項目的字串表示時,才將其轉換為文字。以下完整範例建立了一個表單,選取了一個項目,並在按一下按鈕時讀取目前物件。
using System;
using System.Windows.Forms;
internal static class Program
{
[STAThread]
private static void Main()
{
ApplicationConfiguration.Initialize();
var form = new Form();
var comboBox = new ComboBox { Left = 12, Top = 12, Width = 180 };
comboBox.Items.AddRange(new object[] { "Red", "Green", "Blue" });
comboBox.SelectedItem = "Green";
var button = new Button { Left = 12, Top = 48, Text = "Read selection" };
button.Click += (sender, args) =>
{
object selectedItem = comboBox.SelectedItem;
string selectedText = Convert.ToString(selectedItem) ?? "";
MessageBox.Show($"Item: {selectedText}");
};
form.Controls.Add(comboBox);
form.Controls.Add(button);
Application.Run(form);
}
}
在現有表單中,同樣的操作可以放在它的按一下處理常式中:讀取 comboBox1.SelectedItem,然後根據項目的實際類型進行處理。如果清單包含字串,則選定項目就是字串。如果它包含物件,則在使用其屬性之前,對傳回的物件進行轉換或模式比對。選取也可能不存在,因此在選定某個項目之前執行的程式碼應考慮到 SelectedItem 可能為 null。
使用 ComboBox.GetItemText 在 C# 中獲取 ComboBox 的選定值
ComboBox.GetItemText(item) 是一個方法,傳回控制項用於顯示所提供項目的文字。用 SelectedItem 呼叫它即可獲得目前選取的顯示文字。當項目是物件且 ComboBox 使用 DisplayMember 時,這很有用;對物件呼叫 ToString() 可能會產生不同的文字。GetItemText 回答的是顯示問題,而 SelectedValue 回答的是資料繫結問題。
對於已繫結的 ComboBox,將 DisplayMember 設定為向使用者顯示的屬性,將 ValueMember 設定為識別該項目的屬性。然後在應用程式需要該繫結值時擷取 comboBox1.SelectedValue。該範例同時展示了這兩個結果,以便你選擇程式碼需要的那一個:
using System;
using System.Collections.Generic;
using System.Windows.Forms;
internal sealed class City
{
public int Id { get; set; }
public string Name { get; set; } = "";
}
internal static class Program
{
[STAThread]
private static void Main()
{
ApplicationConfiguration.Initialize();
var form = new Form();
var comboBox = new ComboBox { Left = 12, Top = 12, Width = 180 };
comboBox.DisplayMember = nameof(City.Name);
comboBox.ValueMember = nameof(City.Id);
comboBox.DataSource = new List<City>
{
new City { Id = 1, Name = "Paris" },
new City { Id = 2, Name = "Tokyo" }
};
comboBox.SelectedValue = 2;
var button = new Button { Left = 12, Top = 48, Text = "Read selection" };
button.Click += (sender, args) =>
{
string displayedText = comboBox.GetItemText(comboBox.SelectedItem);
object selectedValue = comboBox.SelectedValue;
MessageBox.Show($"Text: {displayedText}; value: {selectedValue}");
};
form.Controls.Add(comboBox);
form.Controls.Add(button);
Application.Run(form);
}
}
在這裡,GetItemText 讀取顯示文字(例如 Tokyo),而 SelectedValue 讀取繫結的 Id(例如 2)。請使用在控制項上設定的值成員,而不是將顯示文字視為識別碼。這兩個範例都需要 Windows Forms 專案,並且未在所提供的執行階段環境中執行。