Sil*_*ght 4 c# combobox winforms
我想在这样的组合框中添加一些项目:
public class ComboboxItem
{
public string Text { get; set; }
public object Value { get; set; }
public override string ToString()
{
return Text;
}
}
ComboboxItem item = new ComboboxItem();
item.Text = "choose a server...";
item.Value = "-1";
ComboBox_Servers.Items.Add(item);
...
Run Code Online (Sandbox Code Playgroud)
并阅读这些文本和值,SelectedIndexChanged如下所示:
private void ComboBox_Servers_SelectedIndexChanged(object sender, EventArgs e)
{
MessageBox.Show(ComboBox_Servers.SelectedValue.ToString());
}
Run Code Online (Sandbox Code Playgroud)
但是SelectedValue总是为null!问题是什么,我该如何解决?
您可以将其SelectedItem转发并转发给您class并访问它properties.
MessageBox.Show(((ComboboxItem)ComboBox_Countries_In_Silvers.SelectedItem).Value);
Run Code Online (Sandbox Code Playgroud)
编辑您可以尝试使用DataTextField和DataValueField,我将它与DataSource一起使用.
ComboBox_Servers.DataTextField = "Text";
ComboBox_Servers.DataValueField = "Value";
Run Code Online (Sandbox Code Playgroud)
试试这个:
ComboBox cbx = new ComboBox();
cbx.DisplayMember = "Text";
cbx.ValueMember = "Value";
Run Code Online (Sandbox Code Playgroud)
编辑(一点点解释,sory,我也没注意到你的组合框没有绑定,我责怪缺少咖啡因):
这里解释了SelectedValue和SelectedItem之间的区别:ComboBox SelectedItem vs SelectedValue
因此,如果您的组合框未绑定到数据源,则DisplayMember和ValueMember不会执行任何操作,并且SelectedValue将始终为null,不会调用SelectedValueChanged.所以要么绑定你的组合框:
comboBox1.DisplayMember = "Text";
comboBox1.ValueMember = "Value";
List<ComboboxItem> list = new List<ComboboxItem>();
ComboboxItem item = new ComboboxItem();
item.Text = "choose a server...";
item.Value = "-1";
list.Add(item);
item = new ComboboxItem();
item.Text = "S1";
item.Value = "1";
list.Add(item);
item = new ComboboxItem();
item.Text = "S2";
item.Value = "2";
list.Add(item);
cbx.DataSource = list; // bind combobox to a datasource
Run Code Online (Sandbox Code Playgroud)
或使用SelectedItem属性:
if (cbx.SelectedItem != null)
Console.WriteLine("ITEM: "+comboBox1.SelectedItem.ToString());
Run Code Online (Sandbox Code Playgroud)