zoukankan      html  css  js  c++  java
  • SelectedIndexChanged事件, SelectedValueChanged事件和SelectionChangeCommitted事件的区别及应用

    SelectionChangeCommitted事件

    在设定datasource和displaymember和valuemember时,以及手动改变combobox索引和值时都不触发该事件, 只是在界面选择combobox不同值时触发。

    SelectedIndexChanged事件  当 SelectedIndex 属性更改时发生,索引改变时触发。

    SelectedValueChanged事件   当 SelectedValue 属性更改时发生,值改变时触发。

    --------------------------------------------------------------------------------------------------------------------------

    区别:

    1、SelectedIndexChanged和SelectedValueChanged可以通过编程的方式更改属性而触发事件,但SelectionChangeCommitted事件必须由用户操作选定选项才能触发。

    2、在初始化时(设置源)SelectedIndexChanged和SelectedValueChanged都会被调用,而SelectionChangeCommitted没有这个问题。

    3、SelectionChangeCommitted也有一个小问题,当打开下拉菜单,用键盘的上下光标键选择条目后(不用鼠标点击),鼠标点击其他控件,使焦点转移,此时comboBox的Text属性已改变,SelectedIndex属性也已改变,但这样的操作不会触发SelectionChangeCommitted事件。结论:SelectionChangeCommitted一定要由鼠标选择才能触发(个人感觉)。

    --------------------------------------------------------------------------------------------------------------------------

    关于事件的触发

    设置DataSource, DisplayMember, ValueMember不同顺序触发SelectedIndexChanged事件和SelectedValueChanged事件的次数

    顺序一:

    this.comboBox1.DisplayMember = "userName";  (不触发)

    this.comboBox1.ValueMember = "userAge";    (只触发SelectedValueChanged)

    this.comboBox1.DataSource = dt; (都触发)

    SelectedValueChanged触发两次(总是先触发)SelectedIndexChanged,触发一次 (设置DisplayMember属性时不触发两种事件)

    顺序二:

    this.comboBox1.ValueMember = "userAge";

    this.comboBox1.DisplayMember = "userName";

    this.comboBox1.DataSource = dt;

    同上

    顺序三:

    this.comboBox1.DataSource = dt; (都触发)

    this.comboBox1.DisplayMember = "userName";(都触发)

    this.comboBox1.ValueMember = "userAge";(只触发SelectedValueChanged事件)

    SelectedValueChanged触发三次(总是先触发)SelectedIndexChanged,触发两次 (设置DisplayMember属性时不触发两种事件)

    顺序四:

    this.comboBox1.DataSource = dt; (都触发)

    this.comboBox1.ValueMember = "userAge";(都触发) 其中SelectedValueChanged触发两次

    this.comboBox1.DisplayMember = "userName";(都触发)

    SelectedValueChanged触发四次(总是先触发)SelectedIndexChanged,触发三次 (设置DisplayMember属性时不触发两种事件)

    说明:当设置了DataSource 属性后,SelectedValue 属性值会默认为第一行(所以会触发SelectedIndexChanged事件和SelectedValueChanged事件),因此,如果不希望ComboBox自动选择第一行,还需在设置完DataSource 后自行将SelectedValue 设为“”。

  • 相关阅读:
    Linux常用命令整理
    Linux脚本无法进入目录
    mysql5.7.初始化后,临时密码过期
    通过scp 命令向远程Linux服务器传输文件
    Linux进入单用户模式修改root密码
    Kali Linux安装谷歌输入法
    kali 安装pip命令
    CentOS 7 防火墙设置
    CentOS7 安装python 3.7
    CentOS 7安装完成之后无法联网
  • 原文地址:https://www.cnblogs.com/huangfr/p/2171835.html
Copyright © 2011-2022 走看看