gpt4 book ai didi

c# - 当我在组合框中选择一个项目时如何防止 TextChanged 事件?

转载 作者:行者123 更新时间:2023-11-30 19:58:53 24 4
gpt4 key购买 nike

我有一个 TextChanged我的事件 ComboBox喜欢;

private void comboBox1_TextChanged(object sender, EventArgs e)
{
foreach (var item in comboBox1.Items.Cast<string>().ToList())
{
comboBox1.Items.Remove(item);
}

foreach (string item in InputBox.AutoCompleteCustomSource.Cast<string>().Where(s => s.Contains(comboBox1.Text)).ToList())
{
comboBox1.Items.Add(item);
}
}

作为解释,当我更改组合框的文本时,我想获取 string 值包含在 AutoCompleteCustomSource 中在 InputBox (即 TextBox )上。

当我搜索它们时它工作正常但是当我选择该项目时,显然 TextChanged 事件再次触发并且 Text Combobox的属性(property)将重置。

如何解决?

最佳答案

如果我理解正确,那么我认为您想隐藏组合框的 TextChange 事件。如果是,那么您可以创建一个由 ComboBox 继承的自定义控件并覆盖 TextChange 事件。

public partial class MyCombo : ComboBox
{
public MyCombo()
{
InitializeComponent();
}
bool bFalse = false;
protected override void OnTextChanged(EventArgs e)
{
//Here you can handle the TextChange event if want to suppress it
//just place the base.OnTextChanged(e); line inside the condition
if (!bFalse)
base.OnTextChanged(e);
}
protected override void OnSelectionChangeCommitted(EventArgs e)
{
bFalse = true;
base.OnSelectionChangeCommitted(e);
}
protected override void OnTextUpdate(EventArgs e)
{
base.OnTextUpdate(e);
bFalse = false; //this event will be fire when user types anything. but, not when user selects item from the list.
}
}

已编辑:另一个简单的解决方案是使用 TextUpdate 事件而不是 TextChange 并保持您的组合框不变,而无需创建另一个自定义控件。

private void myCombo1_TextUpdate(object sender, EventArgs e)
{
foreach (var item in myCombo1.Items.Cast<string>().ToList())
{
myCombo1.Items.Remove(item);
}

foreach (string item in myCombo1.AutoCompleteCustomSource.Cast<string>().Where(s => s.Contains(myCombo1.Text)).ToList())
{
myCombo1.Items.Add(item);
}
}

TextUpdate 事件仅在用户在组合框中键入任何内容时调用。但是,不是当用户从下拉列表中选择项目时。所以,这不会反感添加的项目。

如果您希望在两种情况下(Upper 和 Lower)返回所有匹配项,您还可以更改 where 条件。假设您在列表 1 中有两个项目。 Microsoft Sql Server, 2. microsoft office 那么如果我只输入 microsoft 会出现什么结果。

Where(s => s.ToLower().Contains(comboBox1.Text.ToLower()))

Sample Code

enter image description here

关于c# - 当我在组合框中选择一个项目时如何防止 TextChanged 事件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25662792/

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