比方說,我們在Windows應用程序下面的代碼:ComboBox.SelectedValue不匹配,顯示文本時,DropDownStyle = DropDownList的在Windows 7
ComboBox comboBox = new ComboBox()
{
AutoCompleteMode = AutoCompleteMode.SuggestAppend,
AutoCompleteSource = AutoCompleteSource.ListItems,
DataSource = new string[] { "", "Ark", "Boat", "Bucket" },
DropDownStyle = ComboBoxStyle.DropDownList
};
this.Controls.Add(comboBox);
TextBox textBox = new TextBox()
{
Left = comboBox.Right,
Top = comboBox.Top,
ReadOnly = true
};
textBox.DataBindings.Add("Text", comboBox, "SelectedValue");
this.Controls.Add(textBox);
沒有魔法在這裏,只需綁定到字符串列表的ComboBox
。 TextBox
顯示ComboBox
的SelectedValue
。
當我在ComboBox
中輸入「Bucket」並跳開時,出現意外的行爲。由於某些原因,ComboBox
顯示「Boat」,但TextBox
顯示「Bucket」。我希望他們都顯示「桶」。
如果我將DropDownStyle
更改爲DropDown
,它的行爲如預期,但我不希望用戶能夠輸入任何他們想要的內容。他們應該只能輸入列表中的項目。
更有趣的是,在輸入「Bucket」和Tab鍵後,如果再次輸入「Bucket」,它將在兩個中都顯示「Bucket」。如果我進行第三次嘗試,則返回到「船」,ComboBox
和「文本框」的「桶」。所以它好像是在循環所有B的。
我沒有注意到這一點,直到我最近從XP升級到Windows 7。我不明白這與這有什麼關係,但我反正把它扔掉了。
如果這種行爲是正確的,任何人都可以告訴我該怎麼做才能達到我的預期行爲?
UPDATE這似乎這個是與Windows 7的一切行爲與預期在Windows XP模式。其他人可以運行Windows 7嘗試我的代碼,並驗證我不是瘋了嗎?
我把你的代碼準確地拿到了新的表單上,並且不能重現這種行爲。您可能會嘗試連接SelectedIndexChanged事件並引發一些控制檯消息,並查看組合中鍵入的內容。 – TheHurt 2010-01-04 18:55:50
我添加了'comboBox.SelectedIndexChanged + = new EventHandler(delegate {Console.WriteLine(「SelectedIndex = {0}」,comboBox.SelectedIndex);});'和輸出表示'SelectedIndex'變成了「2」,然後到「3」,與「TextBox」顯示的內容相匹配。 – Ecyrb 2010-01-04 19:09:59
如果這是一個可重現的錯誤,您應該將其提交給Microsoft Connect:https://connect.microsoft.com/VisualStudio/ – 2010-01-05 15:01:41