键入值

时间:2015-10-17 05:24:19

标签: c# combobox null selectedvalue

很抱歉,如果它有一些明显的解决方案,但我试图解决它几个小时但无法找到解决方案。

我在ComboBox中使用了几个WindowsFormsApplication来将idname联系起来。问题是,当用户从组合框列表中选择一个项目时,它可以正常工作,但当他 类型 一个项目时,组合框的SelectedValue属性是null

为了模拟这个问题,我用一个按钮和一个组合框创建了一个from。 在我的实际应用程序中,我使用sqlserver数据库中的表中的数据填充组合框,但为了简单起见,我在此填充list

public Form1()
{
    InitializeComponent();
    List<KeyValuePair<short,short>> l = new List<KeyValuePair<short,short>>();
    l.Add(new KeyValuePair<short,short>(1,10));
    l.Add(new KeyValuePair<short,short>(2,20));
    l.Add(new KeyValuePair<short,short>(3,30));
    this.comboBox1.DataSource = l;
    this.comboBox1.DisplayMember = "Value";
    this.comboBox1.ValueMember = "Key";
}

private void button1_Click(object sender, EventArgs e)
{
    if (this.comboBox1.SelectedValue == null)
        MessageBox.Show("NULL");
    else
        MessageBox.Show(this.comboBox1.SelectedValue.ToString());
}

例如,当用户从列表中选择第二个项目(20)并单击该按钮时,消息框会按预期显示 2 ,但如果他键入数字 20 < / em>进入组合框,SelectedValuenull

这个问题可以通过改变组合框的样式来解决:

this.comboBox1.DropDownStyle = ComboBoxStyle.DropDownList;

但它阻止用户输入组合框,因此我被迫使用默认的ComboBoxStyle.DropDown

2 个答案:

答案 0 :(得分:1)

这是因为组合框没有选择您键入的项目。添加此选项

comboBox1.AutoCompleteMode = AutoCompleteMode.Suggest;

然后它将在能够找到它时选择该项目。

默认设置为AutoCompleteMode.None

(我认为)这主要是针对建议设计的,但它可以解决您的问题。如果你想展示建议:

comboBox1.AutoCompleteSource = AutoCompleteSource.ListItems;

默认设置为AutoCompleteSource.None

https://msdn.microsoft.com/en-us/library/system.windows.forms.combobox.autocompletemode%28v=vs.110%29.aspx

答案 1 :(得分:1)

您拥有的一个选项是在comboBox1.TextChange事件上使用EventHandler,它允许您亲自处理文本转换为不同选项的方式。

这可以添加到设计器中(类似于按钮)。

this.comboBox1.TextChanged += new System.EventHandler(this.UpdateValue);

然后,根据想要阅读结果的方式,看看你是否有匹配,你可以创建一个转换器,使用另一个键/值,或者你可以做一个无聊的旧的tryparse,我会告诉你。您将需要列表作为属性,您可以参考,看看您是否找到了正确的结果。

private void UpdateValue(object sender, EventArgs e)
{
    short result;
    if (short.TryParse(comboBox1.Text, out result))
    {
        var matches = from val in l where val.Value == result select val.Key;
        {
            foreach (short m in matches)
                this.comboBox1.SelectedValue = m;
        }
    }
}
祝你好运!如果您需要更多关于事件处理程序的示例,请告诉我。不要忘记投票。