gpt4 book ai didi

.net - 在 Windows 7 中 DropDownStyle = DropDownList 时,ComboBox.SelectedValue 与显示的文本不匹配

转载 作者:行者123 更新时间:2023-12-04 01:03:25 26 4
gpt4 key购买 nike

假设我们在 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绑定(bind)到字符串列表。 TextBox显示 SelectedValueComboBox .

当我在 ComboBox 中键入“Bucket”时出现意外行为和标签离开。出于某种原因 ComboBox显示“船”,但 TextBox显示“桶”。我希望他们都显示“桶”。

如果我更改 DropDownStyle,它将按预期运行至 DropDown ,但我不希望用户能够输入他们想要的任何内容。他们应该只能键入列表中的项目。

更有趣的是,在键入“Bucket”并跳动之后,如果我再次键入“Bucket”,它将在两者中显示“Bucket”。如果我进行第三次尝试,它会回到 ComboBox 的“Boat”。和“文本框”的“桶”。因此,它似乎在所有 B 中循环。

直到我最近从 XP 升级到 Windows 7 才注意到这一点。我不明白这与这有什么关系,但我还是把它扔掉了。

如果这种行为是正确的,谁能告诉我应该做些什么来实现我的预期行为?

更新 这似乎与 Windows 7 有关。在 Windows XP 模式下,一切都按预期运行。其他运行 Windows 7 的人可以尝试我的代码并验证我没有发疯吗?

最佳答案

解决方法可能是更改 DropDownStyleDropDown并添加以下内容:

comboBox.Validating += new CancelEventHandler((o, e) =>
{
e.Cancel = (comboBox.DataSource as string[]).Contains(comboBox.Text) == false;
});

这将允许用户键入任何内容,但除非他们键入有效项目,否则不会让他们离开控件。

尽管如此,对从 XP 到 Win 7 的行为变化还是不满意。

关于.net - 在 Windows 7 中 DropDownStyle = DropDownList 时,ComboBox.SelectedValue 与显示的文本不匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2001361/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com