免責聲明 - 我一直只使用C#大約一週,所以希望這不是一個n00b問題。我確實環顧四周,但無法找到有效的解決方案,其中包括this線程的結果。ComboBox.Text =空字符串,而不是實際顯示的字符串
我在Windows窗體上有一個組合框。組合框的數據從Access數據庫填充。 相關的屬性,我已經設置 - AutoCompleteMode = Append; AutoCompleteSource = ListItems; DropDownStyle = DropDown。用戶必須能夠輸入組合框並自動完成,因此DropDownList的DropDownStyle將不起作用。而不是使用默認的下拉箭頭,我有一個動態的PictureBox取代它。單擊PictureBox或觸發Enter事件將把組合框的DropDown屬性設置爲true。
因爲它目前是,用戶可以選擇的項目就好了或類型的項目,按項目中進入或類型並離開現場,等....在所有這些不同類型的互動,我能夠確定的是什麼組合框中的正確值是。我有一些觸發器來確保SelectedValue和顯示的文本始終保持同步。
我能夠得到正確的值每一個可能的相互作用下,我能想到的,除了一個。如果用戶開始輸入字符串(使用DropDowned屬性= true),並點擊右箭頭鍵使字符串自動完成,則組合框中的字符串始終爲空字符串。
視覺:
Selected_ 文本
在上面的字符串加粗的文字是在組合框中突出顯示的文本。然後,如果用戶點擊右箭頭鍵,使在組合框中的文字看起來像
Selected_Text
(注意DropDowned仍然是正確的在這一點上)的ComboBox.Text值始終爲「」。
下面是組合框DropDownClosed事件,這是一旦用戶按下輸入被觸發的第一件事情之一的代碼。
private void cmbxYear_DropDownClosed(object sender, EventArgs e)
{
try
{
if (!cmbxYear.Text.Equals(cmbxYear.SelectedValue.ToString()))
{
if (!bUpdated & !bErrorFound)
{
validateData(cmbxYear, clrYear, false, imgFilter1, imgNoFilter1);
updateTable();
}
}
imgFilter1.Visible = false;
imgNoFilter1.Visible = true;
}
catch
{
imgNoFilter1.Visible = false;
imgFilter1.Visible = true;
}
}
我也是剛發現ComboBox.Text總是當DropDowned屬性= true,並且用戶鍵入的東西,然後按「Enter」鍵一個空字符串。如果DropDown屬性= false,則不是這種情況。當發生這種情況時,返回正確的字符串。
我甚至嘗試讓程序選擇組合框中的所有文本;然而,給SelectionLength的值大於ComboBox.Text.Length似乎不起作用。我也嘗試過提及SelectedValue;但是,SelectedValue爲null。
對於所有密集的目的,應用程序時深信,在組合框爲空字符串。
如何檢索實際的字符串?
萬一這有助於我對以下事件的代碼:點擊,DataSourceChanged,下拉列表,DropDownClosed,回車,的KeyDown,Leave和驗證。
你可以顯示一些代碼..?你似乎已經寫了很多東西來解釋看似簡單的解決方案 – MethodMan 2012-08-09 16:41:56
在哪個事件中你將檢索SelectedText? SelectedText尚未填充完全可能(因爲DropDown爲true)。也許在下拉動作完成之前控件不會建立這個值? – 2012-08-09 16:48:23
我一直試圖檢索DropDownClosed事件中的文本(只是爲它添加了代碼) – TehTechGuy 2012-08-09 16:54:03