簡體   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