2012-01-10 22 views
0

我正在使用不帶下拉列表的組合框來僅接受文本輸入。在窗體窗體上,我有一個OK按鈕,它調用一個使用combobox.Text屬性的函數。如何在Winforms中的Keydown事件後使用combobox.Text

問題是我想在用戶鍵入內容然後按ENTER鍵時調用此函數。我正在嘗試處理KeyDown事件(我試過其他事件的結果相同),但是我發現在這個事件發生後combobox.Text爲null。我想是這樣的,以理想的工作:

private void cbox_KeyDown(object sender, KeyEventArgs e) 
     { 
      if (e.KeyValue == 13) 
     { 
      OK(cbox.Text); 
     } 
    } 

爲什麼combobox.Text KeyDown事件後抹去?同樣的問題不會發生在文本框的權利?我幾乎絕望,但我不想在程序中的每一個窗體上替換這個盒子......請指教!

回答

1

你的表單上是否有多個組合框?該事件是針對cbox,但您從cbo獲得文本結果。

我建議你改變代碼如下:

private void cbox_KeyDown(object sender, KeyEventArgs e) 
{ 
    if (e.KeyCode == Keys.Enter || e.KeyCode == Keys.Return) 
    { 
      string result = cbox.Text; 
    } 
} 
+0

哦,沒有遺憾,那只是在我試圖讓儘可能明確的例子一個錯字。只有一個ComboBox,上面的代碼不適用於我恐怕 - 在調用OK()的時候,cbox.Text是一個空字符串。 – SWilliams 2012-01-10 12:17:21

+0

我修改了上面的例子。如果用字符串result = cbox.Text替換OK()方法會發生什麼;你有沒有其他的事件在ComboBox的文本上作用? – 2012-01-10 12:26:30

+0

我以前在調試過的時候試過 - 結果爲空,而且cbox.Text =「」據我所知。我不認爲在組合框上還有其他事件正在進行,出於某種原因,文本消失似乎只發生在KeyDown事件上? – SWilliams 2012-01-10 12:55:16