繁体   English   中英

键入值时,组合框返回null

[英]Combobox returns null when value is typed

抱歉,它有一些明显的解决方案,但我试图解决数小时,但找不到解决方案。

我在WindowsFormsApplication使用了几个ComboBox来将idname s关联。 问题在于,当用户从组合框列表中选择一个项目时,它可以正常工作,但是当他键入一个项目时,组合框的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 ,则SelectedValuenull

可以通过更改组合框的样式来解决此问题:

this.comboBox1.DropDownStyle = ComboBoxStyle.DropDownList;

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

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

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

您拥有的一个选项是在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;
        }
    }
}

祝好运! 让我知道您是否需要事件处理程序的更多示例。 不要忘记投票。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM