Допустим, у нас есть следующий код в приложении 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);
Никакой магии здесь нет, просто ComboBox
привязан к списку строк. TextBox
отображает SelectedValue
из ComboBox
.
Я получаю неожиданное поведение, когда набираю "Bucket" в ComboBox
и убираю вкладку. По какой-то причине ComboBox
отображает «Лодка», а TextBox
отображает «Ведро». Я ожидал бы, что они оба покажут «Ведро».
Если я изменим DropDownStyle
на DropDown
, он будет работать так, как и ожидалось, но я не хочу, чтобы пользователи могли печатать что угодно. Они должны иметь возможность печатать только те элементы, которые есть в списке.
Еще интереснее то, что после того, как я наберу "Bucket" и уберем вкладки, если я снова наберу "Bucket", он отобразит "Bucket" в обоих случаях. Если я сделаю третью попытку, я вернусь к «Лодке» для ComboBox
и «Ведро» для «TextBox». Так что кажется, что он проезжает через все B.
Я не замечал этого до недавнего обновления с XP до Windows 7. Я не понимаю, как это могло иметь какое-либо отношение к этому, но я все равно выбрасываю это.
Если это поведение правильное, может кто-нибудь сказать мне, что я должен делать, чтобы добиться моего ожидаемого поведения?
ОБНОВЛЕНИЕ Казалось бы, это связано с Windows 7. Все работает в режиме Windows XP в соответствии с ожиданиями. Может кто-нибудь еще под управлением Windows 7 попробовать мой код и убедиться, что я не сумасшедший?