zoukankan      html  css  js  c++  java
  • 设置数据源时事件的触发

    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;//重新订阅事件
  • 相关阅读:
    编译用到boost相关的东西,问题的解决;以及和googletest库
    看开源代码利器—用Graphviz + CodeViz生成C/C++函数调用图(call graph)
    centos5 升级到centos6
    Go vs Erlang
    Graphviz
    Oracle相关安装经验总结
    学习erlang书籍
    sublime使用总结
    List集合五种遍历方式
    nginx常用命令
  • 原文地址:https://www.cnblogs.com/jizhiqiliao/p/9910317.html
Copyright © 2011-2022 走看看