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

Soner Gonul

我有一个喜欢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价值包含AutoCompleteCustomSourceInputBox(这是TextBox)。

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

如何解决呢?

如果我理解正确,那么我想您想隐藏组合框的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.
    }
}

编辑:另一个简单的方面是useTextUpdate事件,而不是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仅当用户在组合框中键入任何内容时,事件才会调用。但是,当用户从下拉列表中选择项目时,情况并非如此。因此,这不会激怒添加的项目。

如果您希望在两种情况下(上和下)都返回所有匹配项,也可以更改where条件。假设您在列表中有两个项目,1. Microsoft Sql Server, 2. microsoft office那么如果我microsoft键入内容将是什么结果

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

样例代码

在此处输入图片说明

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

仅当我从组合框中选择一个项目时才执行操作

来自分类Dev

当它是前一个项目的前缀时,如何在 wpf 组合框中选择一个项目?

来自分类Dev

在php中选择另一个组合框时,如何使组合框可见?

来自分类Dev

我想从组合框中选择一个项目,并在单击按钮时根据所选项目打开另一个框架

来自分类Dev

在Xaml(Silverlight)中选择一个项目时,设置组合框的VisualState

来自分类Dev

将多个ComboBox绑定到一个列表-问题:当我选择一个项目时,所有组合框都会更改

来自分类Dev

从一个组合框中选择的项目如何更改第二个组合框上的特定项目?

来自分类Dev

当我在 DropDownList 中选择一个项目时 Selected 未设置为 true

来自分类Dev

如何从c#中的另一个组合框中删除从组合框中选择的项目

来自分类Dev

如何从我的组合框列表中选择一个值?

来自分类Dev

当我在vtk窗口中选择一个框时,可以将哪种vtk.vtkCommand事件设置为Observer?

来自分类Dev

当我在DatePicker中选择一个日期时如何获取文本字段值

来自分类Dev

当我从 API url json 数据中选择第一个选择框时,我想在第二个选择框中显示数据

来自分类Dev

在自动完成组合框中选择下一个项目时遇到问题

来自分类Dev

在组合框中选择一个项目,该项目是根据AJAX请求填充的

来自分类Dev

当我使用 jquery 选择另一个选择框的空值时,如何重置选择框?

来自分类Dev

PHP从“组合”框中选择一个项目,然后将值设置为输入字段

来自分类Dev

使用 LinqToSql 填充组合框并从中选择一个项目

来自分类Dev

当我从tableView中选择一个单元格时,如何使用navigationController来显示WebView?

来自分类Dev

当我们在Angular中选择另一个复选框时,如何自动取消选择一个复选框?

来自分类Dev

当我在选择器中选择一个标签时显示一个新视图

来自分类Dev

当我在选择中选择一个值时标记一个复选框

来自分类Dev

在组合框中选择一个项目,并用与先前的php和mysql选项相关的数据填充另一个组合框

来自分类Dev

当我单击一个项目时,ListView ItemClickListener选择多个项目

来自分类Dev

如何从Ext JS Grid的组合框中选择一个值

来自分类Dev

在另一个JComboBox中选择一个项目时如何显示JComboBox

来自分类Dev

当我们释放一个按钮时,如何触发一个事件?

来自分类Dev

Extjs 5/6:在标记字段中已选择的项目中选择一个项目时将触发事件

来自分类Dev

_tkinter.TclError:当我点击列表框中的一个项目时

Related 相关文章

  1. 1

    仅当我从组合框中选择一个项目时才执行操作

  2. 2

    当它是前一个项目的前缀时,如何在 wpf 组合框中选择一个项目?

  3. 3

    在php中选择另一个组合框时,如何使组合框可见?

  4. 4

    我想从组合框中选择一个项目,并在单击按钮时根据所选项目打开另一个框架

  5. 5

    在Xaml(Silverlight)中选择一个项目时,设置组合框的VisualState

  6. 6

    将多个ComboBox绑定到一个列表-问题:当我选择一个项目时,所有组合框都会更改

  7. 7

    从一个组合框中选择的项目如何更改第二个组合框上的特定项目?

  8. 8

    当我在 DropDownList 中选择一个项目时 Selected 未设置为 true

  9. 9

    如何从c#中的另一个组合框中删除从组合框中选择的项目

  10. 10

    如何从我的组合框列表中选择一个值?

  11. 11

    当我在vtk窗口中选择一个框时,可以将哪种vtk.vtkCommand事件设置为Observer?

  12. 12

    当我在DatePicker中选择一个日期时如何获取文本字段值

  13. 13

    当我从 API url json 数据中选择第一个选择框时,我想在第二个选择框中显示数据

  14. 14

    在自动完成组合框中选择下一个项目时遇到问题

  15. 15

    在组合框中选择一个项目,该项目是根据AJAX请求填充的

  16. 16

    当我使用 jquery 选择另一个选择框的空值时,如何重置选择框?

  17. 17

    PHP从“组合”框中选择一个项目,然后将值设置为输入字段

  18. 18

    使用 LinqToSql 填充组合框并从中选择一个项目

  19. 19

    当我从tableView中选择一个单元格时,如何使用navigationController来显示WebView?

  20. 20

    当我们在Angular中选择另一个复选框时,如何自动取消选择一个复选框?

  21. 21

    当我在选择器中选择一个标签时显示一个新视图

  22. 22

    当我在选择中选择一个值时标记一个复选框

  23. 23

    在组合框中选择一个项目,并用与先前的php和mysql选项相关的数据填充另一个组合框

  24. 24

    当我单击一个项目时,ListView ItemClickListener选择多个项目

  25. 25

    如何从Ext JS Grid的组合框中选择一个值

  26. 26

    在另一个JComboBox中选择一个项目时如何显示JComboBox

  27. 27

    当我们释放一个按钮时,如何触发一个事件?

  28. 28

    Extjs 5/6:在标记字段中已选择的项目中选择一个项目时将触发事件

  29. 29

    _tkinter.TclError:当我点击列表框中的一个项目时

热门标签

归档