设置数据源时事件的触发

Posted jizhiqiliao

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了设置数据源时事件的触发相关的知识,希望对你有一定的参考价值。

SelectedIndexChanged和SelectedValueChanged可以通过编程更改属性来触发事件,SelectionChangeCommitted事件必须由用户操作才能触发。

在初始化时(设置源)SelectedIndexChanged和SelectedValueChanged都会被调用。

在不同的执行顺序下,触发的情况也不同:

顺序一:

this.comboBox1.DisplayMember = "userName";(不触发)
this.comboBox1.ValueMember = "userAge";(只触发SelectedValueChanged)
this.comboBox1.DataSource = dt;(都触发)

顺序二:

this.comboBox1.ValueMember = "userAge";(只触发SelectedValueChanged)
this.comboBox1.DisplayMember = "userName";(不触发)
this.comboBox1.DataSource = dt; (两者都触发)

顺序三:

this.comboBox1.DataSource = dt; (都触发)
this.comboBox1.DisplayMember = "userName";(都触发)
this.comboBox1.ValueMember = "userAge";(只触发SelectedValueChanged事件)

顺序四:

this.comboBox1.DataSource = dt; (都触发)
this.comboBox1.ValueMember = "userAge";(都触发,其中SelectedValueChanged触发两次)
this.comboBox1.DisplayMember = "userName";(都触发)

避免触发事件的方式有以下两种:

  1. 设置一个字段,通过判断忽略前几次的事件触发
    int temp = 0;
    // code omited
    temp++;
    if(temp > 3)
    {
        // code omited    
    }
  2. 取消事件的订阅,然后再重新订阅事件
    comboBox1.SelectedIndexChanged -= comboBox1_SelectedIndexChanged;//删除事件
    // code omited
    comboBox1.SelectedIndexChanged += comboBox1_SelectedIndexChanged;//重新订阅事件

以上是关于设置数据源时事件的触发的主要内容,如果未能解决你的问题,请参考以下文章

设置数据源时事件的触发

如何设置 vscode 的代码片段,以便在自动完成后自动触发 vscode 的智能感知?

C# winform如何设置右击时触发事件

响应Activity中的ViewPager2 Fragments事件

vue+mousemove移入事件只触发一次怎么设置?

如何触发下拉框下拉事件