C# SelectedIndexChanged事件详解

 更新时间:2021年08月12日 17:03:44   作者:ruiqi317  
这篇文章主要介绍了C# SelectedIndexChanged事件详解,本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可以参考下

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 设为“”。

到此这篇关于C# SelectedIndexChanged事件详解的文章就介绍到这了,更多相关C# SelectedIndexChanged事件内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • C#中的委托数据类型简介

    C#中的委托数据类型简介

    委托是一个类型安全的对象,它指向程序中另一个以后会被调用的方法(或多个方法)。通过本文给大家介绍C#中的委托数据类型简介,对c委托类型相关知识感兴趣的朋友一起学习吧
    2016-03-03
  • 浅谈C#中的string驻留池

    浅谈C#中的string驻留池

    这篇文章主要介绍了C#中的string驻留池的的相关资料,文中示例代码非常细致,供大家参考和学习,感兴趣的朋友可以了解下
    2020-06-06
  • 利用C#实现修改图片透明度功能

    利用C#实现修改图片透明度功能

    这篇文章主要为大家详细介绍了如何利用C#实现修改图片透明度功能,文中的示例代码讲解详细,对我们学习C#有一定的帮助,感兴趣的小伙伴可以了解一下
    2022-12-12
  • 详解C# 虚方法virtual

    详解C# 虚方法virtual

    这篇文章主要介绍了C# 虚方法virtual的相关资料,帮助大家更好的理解和学习使用c#,感兴趣的朋友可以了解下
    2021-04-04
  • Asp.Net中MVC缓存详解

    Asp.Net中MVC缓存详解

    这篇文章主要介绍了Asp.Net中MVC缓存的种类区别等内容,一下来学习下。
    2017-12-12
  • C# 字典Dictionary的具体用法

    C# 字典Dictionary的具体用法

    本文主要介绍了C# 字典Dictionary的具体用法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-07-07
  • 详解C#中普通缓存的使用

    详解C#中普通缓存的使用

    缓存的概念及优缺点在这里就不多做介绍,当然缓存包含多种有普通缓存、客户端缓存、DNS缓存、反向代理缓存以及分布式缓存等等。今天主要聊一聊C#通过编码来实现普通的缓存、话不多说直接上代码。
    2021-05-05
  • C#9.0主要特性的一些想法

    C#9.0主要特性的一些想法

    这篇文章主要给大家介绍了关于C#9.0主要特性的一些想法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-11-11
  • Visual Studio中根据系统区分引用64位、32位DLL动态库文件的配置方法

    Visual Studio中根据系统区分引用64位、32位DLL动态库文件的配置方法

    这篇文章主要介绍了Visual Studio中根据系统区分引用64位、32位DLL动态库文件的配置方法,本文在VS2008中测试通过,其它VS版本可以参考下
    2014-09-09
  • C#将隐私信息(银行账户,身份证号码)中间部分特殊字符替换成*

    C#将隐私信息(银行账户,身份证号码)中间部分特殊字符替换成*

    大家在银行交易某些业务时,都可以看到无论是身份证、银行账号中间部分都是用*号替换的,下面这篇文章主要介绍C#将隐私信息(银行账户,身份证号码)中间部分特殊字符替换成*的相关资料,需要的朋友可以参考下
    2015-08-08

最新评论