2011-09-09 32 views
3

我在窗體上有一個組合框。 ComboBox的DropDownStyle屬性設置爲DropDown,以便用戶可以從下拉列表中選擇項目或手動鍵入一些文本。當從下拉列表中選擇一個項目時,更改組合框的文本字段?

當用戶從下拉列表中選擇一個項目時,我想在項目的文本出現在ComboBox的文本字段中之前進行一些更改。要使用非常簡單的例子,假設在下拉列表中包含了由一個ID和描述的,像這樣的項目:

101 Cat 
102 Dog 
103 Bird 

當選擇其中一個項目,我想只有描述出現在組合框的文本字段中。所以當選擇「102 Dog」時,字符串「Dog」應顯示在文本字段中,可供用戶編輯,下拉列表中的項目應保持不變。

我以爲我可以只聽組合框的SelectionChangeCommitted事件,並將ComboBox的Text屬性設置爲我喜歡的任何屬性。但是如果我這樣做,我對Text所作的更改將被忽略,並且整個字符串(「102 Dog」)仍顯示在ComboBox中。

因此,我想我應該也將SelectedIndex字段更新爲-1,以向組合框指示我設置的Text不是下拉列表中的項目。但是,這完全清除了文本字段,無論我更改Text屬性。

所以後來我想,SelectionChangedCommitted是使用了錯誤的事件,因爲它似乎太快了,我的目的(在Text屬性似乎只與我的選擇SelectionChangeCommitted事件處理程序已完成更新)火。但所有其他ComboBox事件也無法正常工作,包括SelectedIndexChangedDropDownClosed

我認爲這是相當微不足道的。有一個簡單的方法來做到這一點,我敢肯定我錯過了明顯的東西......任何想法?

回答

3

你可以試試這個:

private void comboBox1_SelectedIndexChanged(object sender, EventArgs e) 
{ 
    if (comboBox1.SelectedIndex > -1) 
    { 
    string value = comboBox1.Items[comboBox1.SelectedIndex].ToString().Substring(4); 
    this.BeginInvoke((MethodInvoker)delegate { this.comboBox1.Text = value; }); 
    } 
} 
+0

BeginInvoke!當然。好消息是這個作品,壞消息是我現在感覺像個白癡。 ;) 謝謝。 – Justin

0

選擇時,我想弄清楚,你displaing「101貓」,「狗102」等,當用戶下拉列表中組合並顯示它們? 101是「貓」的關鍵,102是「狗」的關鍵,等等?如果是這樣,你爲什麼要顯示它們,而不只是顯示每個項目的文本(如果這是你的要求,道歉我的答案)。據我所知,我將配置組合框的值成員返回給你101,102等和顯示成員的屬性,返回你的每個項目的文本屬性。這樣,你就可以得到你想要的東西,即顯示「貓」,「狗」和「鳥」文本。另外,如果需要進一步處理,則可以將事件附加到組合的TextChanged事件。

+0

從下拉列表中選擇一個項目後,我想在下拉菜單中顯示「101 Cat」,「102 Dog」等,但只顯示文本框中的「Cat」,「Dog」等。是的,這是一個要求。我使用貓和狗作爲一個非常簡單的例子,但重點是下拉菜單中顯示的項目與用戶選擇項目後顯示在文本框中的項目不同。 – Justin

相關問題