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;//重新订阅事件
  • 相关阅读:
    【转】C#中判断扫描枪输入与键盘输入
    根据名称分组,选择最大日期和最小日期的数据,并显示在一行上
    C#如何判断我的程序已经有一个实例正在运行
    消息队列篇
    Redis面试笔记(二)雪崩、穿透、击穿三连问
    MySQL基础
    Redis面试笔记(一)
    Java多线程(二)
    Java多线程(一)
    Elastic Search之布尔查询
  • 原文地址:https://www.cnblogs.com/jizhiqiliao/p/9910317.html
Copyright © 2011-2022 走看看