假设我们在Windows应用程序中有以下代码:
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);
Run Code Online (Sandbox Code Playgroud)
这里没有魔法,只是ComboBox绑定到一个字符串列表.该TextBox显示SelectedValue的ComboBox.
当我在" ComboBox标签"中输入"Bucket"时,我会遇到意外行为.由于某种原因,ComboBox显示"船"但TextBox显示"桶".我希望他们都能显示"Bucket".
如果我更改DropDownStyle为DropDown,它的行为与预期一致,但我不希望用户能够键入他们想要的任何内容.他们应该只能输入列表中的项目.
更有趣的是,在输入"Bucket"并跳出标签后,如果我再次输入"Bucket",它将同时显示"Bucket".如果我进行第三次尝试,它将返回"船",ComboBox而"Bucket"则返回"TextBox".所以看起来它正在骑自行车穿过所有的B.
在我最近从XP升级到Windows 7之前,我没有注意到这一点.我不明白这与此有什么关系,但无论如何我都把它丢掉了.
如果这种行为是正确的,有人能告诉我我应该做些什么来实现我预期的行为吗?
UPDATE 这似乎这是因为预计在Windows XP模式与Windows …
我希望用户从ComboBox中选择一个值.必须在用户的文本输入中建议条目.
我是否必须使用事件来强制执行System.Windows.Forms.ComboBox包含自己的值DataSource?
示例:必须向用户建议条目...如果我写"CO",组合应该建议"CONGO"和"COLOMBIA",但用户只能输入其中一个值.用户不应该引入"COfdfgdfg"或任何随机字符串.
谢谢!