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事件内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • C#和vb.net实现PDF 添加可视化和不可见数字签名

    目录 1. 在VS程序中通过Nuget安装 Spire.PDF for .NET 版本7.8.2,安装步骤如下: 2.在VS程序中添加如下代码添加数字签名 2.1 添加可视化数字签名 2.2 添加不可见数字签名 本文通过C#程序代码展示如何给PDF文档添加可视化数字签名和不可见数字签名.可视化数字签名,即在PDF文档中的指定页面位置添加签名,包含相关文字信息和签名图片等:不可见数字签名,即添加签名时不在文档中指定签名位置,在文档正文中不显示相关数字签名信息. 这里签名是通过PdfOrdinary

  • 关于C#操作文件路径(Directory)的常用静态方法详解

    目录 Directory: 创建文件夹 删除文件夹 获取文件夹下的子文件夹 获取同类型的文件 判断文件夹是否存在 移动文件夹 总结 之前发过File对文件的操作 C# (File方法)对文件的操作,字节写入和读取 Directory: 主要用于操作文件的路径,如创建文件夹和获取文件夹的所有子目录, 简单的说就是"操作文件夹",而File是操作文件的 创建文件夹 直接使用静态方法,在C盘创建一个名为a的文件夹 Directory.CreateDirectory(@"C\a&qu

  • C#DirectoryInfo类用法详解

    DirectoryInfo类是System.IO命名空间的一部分.它用于创建,删除和移动目录.它提供了执行与目录和子目录相关的操作的方法.这是一个密封的类,所以不能继承它. DirectoryInfo类提供了下面列出的构造函数,方法和属性. C# DirectoryInfo语法 [SerializableAttribute] [ComVisibleAttribute(true)] public sealed class DirectoryInfo : FileSystemInfo C#  Dir

  • C#设计模式实现之迭代器模式

    目录 前言: 一.餐馆合并菜单 二.改进菜单实现 三.迭代器模式 总结 前言: 迭代器模式平时用的不多,因为不管C#还是Java都已经帮我封装了,但是你是否知道平时经常在用的东西本质是怎么回事呢. 看完迭代器模式你就知道C# foreach循环是怎么实现的了,我的另一篇C# Foreach循环本质与枚举器就讲解了foreach的本质,其中用到的就是迭代器模式. 按照惯例,例子走起.(写了几个小时浏览器崩溃,我看见在自动保存啊,结果没内容,再撸一遍精简点的吧) 一.餐馆合并菜单 现在有两个餐馆和并

  • C#代码延时的几种实现

    目录 Task.Delay();异步实现 线程实现: 计时器方式实现: Task.Delay();异步实现 using System; using System.Threading.Tasks; namespace csharpYS { class Program { static void Main(string[] args) { Console.WriteLine("Mian方法第一次输出..."); #region 第一种形式 var task_1 = Task.Run(asy

  • C#中Foreach循环遍历的本质与枚举器详解

    目录 前言 1.创建一个控制台应用程序 2.编写测试代码并分析 3.总结 前言 对于C#里面的Foreach学过 语言的人都知道怎么用,但是其原理相信很多人和我一样都没有去深究.刚回顾泛型讲到枚举器让我联想到了Foreach的实现,所以进行一番探究,有什么不对或者错误的地方大家多多斧正. 1.创建一个控制台应用程序 2.编写测试代码并分析 在Program类中写一个foreach循环 class Program { static void Main(string[] args) { List p

  • C# 数组删除元素的实现示例

    本文主要介绍了C# 数组删除元素的实现示例,具体如下: using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Collections; namespace _1207_数组删除元素 { class Program { //只能在动态数组ArrayList类中对数组执行删除元素的操作. //因为动

  • C#利用File方法对文件的操作总结(字节写入和读取)

    C#文件的读和写提供了非常多的方法基本一两行就可以搞定"读和写",在编程里还是比较重要的 什么是读? 你的程序去读你磁盘里的文件 上面是写? 你的程序在你磁盘创建文件 有什么用? 可以保存数据,用户等2次打开时就不用重新加载,或者软件异常,把异常信息或日志信息等进行保存 @符作用: 路径使用是字符串类型,而路径有非常多的" \" 而如\n表示的是换行,为了不让这些"\"起到转义的意思 在路径前使用@表示这字符串并不需要其转义 所以写路径必须得在前

  • C# SelectedIndexChanged事件详解

    SelectionChangeCommitted事件 在设定datasource和displaymember和valuemember时,以及手动改变combobox索引和值时都不触发该事件, 只是在界面选择combobox不同值时触发. SelectedIndexChanged事件  当 SelectedIndex 属性更改时发生,索引改变时触发. SelectedValueChanged事件   当 SelectedValue 属性更改时发生,值改变时触发. 区别: SelectedIndex

  • jquery html动态添加的元素绑定事件详解

    在实际开发中会遇到要给动态生成的html元素绑定触发事件的情况: <div id="testdiv"> <ul></ul> </div> 假设我们要给ul动态添加的<li>绑定click事件形成如下结果 <div id="testdiv"> <ul> <li name="apple">apple</li> <li name="

  • Vue自定义事件(详解)

    前面的话 父组件使用props传递数据给子组件,子组件怎么跟父组件通信呢?这时,Vue的自定义事件就派上用场了.本文将详细介绍Vue自定义事件 事件绑定 每个 Vue 实例都实现了事件接口 (Events interface),即 使用 $on(eventName) 监听事件 使用 $emit(eventName) 触发事件 [注意]Vue 的事件系统分离自浏览器的EventTarget API.尽管它们的运行类似,但是 $on 和 $emit 不是addEventListener 和 disp

  • Android 广播大全 Intent Action 事件详解

    具体内容如下所示: Intent.ACTION_AIRPLANE_MODE_CHANGED; //关闭或打开飞行模式时的广播 Intent.ACTION_BATTERY_CHANGED; //充电状态,或者电池的电量发生变化 //电池的充电状态.电荷级别改变,不能通过组建声明接收这个广播,只有通过Context.registerReceiver()注册 Intent.ACTION_BATTERY_LOW; //表示电池电量低 Intent.ACTION_BATTERY_OKAY; //表示电池电

  • JS触发服务器控件的单击事件(详解)

    如下所示: <script src="../Js/jquery-1.4.2.min.js" type="text/javascript"></script> <script type="text/javascript"> $(function () { $("#a_doClick").click(function () { $("#<%=btnTest.ClientID%&g

  • jQuery unbind 删除绑定事件详解

    unbind([type],[data]) 是 bind()的反向操作,从每一个匹配的元素中删除绑定的事件.如果没有参数,则删除所有绑定的事件.你可以将你用bind()注册的自定义事件取消绑定.如果提供了事件类型作为参数,则只删除该类型的绑定事件.如果把在绑定时传递的处理函数作为第二个参数,则只有这个特定的事件处理函数会被删除. 返回值 : jQuery 参数 : type (String) : (可选) 事件类型 data (Function) : (可选) 要从每个匹配元素的事件中反绑定的事

  • element ui 对话框el-dialog关闭事件详解

    通常会有需求,在关闭弹框后需要清空填写的数据,这时候就需要关闭事件了 <el-dialog title="标题" :visible.sync="bind" size="small" @close='closeDialog'> </el-dialog> 在标签中加入@close='closeDialog' mothods中加入 //关闭弹框的事件 closeDialog(){ this.xxx = '';//清空数据 },

  • 微信小程序页面调用自定义组件内的事件详解

    这篇文章主要介绍了微信小程序页面调用自定义组件内的事件详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 page page.json { "usingComponents": { "my-component": "../components/component/component", } } page.wxml <my-component id="myComponent&quo

  • 关于layui 下拉列表的change事件详解

    默认情况下,事件所监听的是全部的form模块元素,但如果你只想监听某一个元素,使用事件过滤器即可. 如:<select lay-filter="test"></select> 监听select 下拉选择框被选中时触发,回调函数返回一个object参数,携带两个成员: 注意:form.render('select');渲染一下 不然你的操作还是不生效 select不是选择器 表示渲染下拉列表 不写表示所有表单都渲染 语法如下 form.on('select(fil

  • vue 监听键盘回车事件详解 @keyup.enter || @keyup.enter.native

    vue运行为v-on在监听键盘事件时,添加了特殊的键盘修饰符: <input v-on:keyup.13="submit"> vue还非常贴心地给出了常用按键的别名,这样就不必去记keyCode ~ ~ 上面代码,还可以在这样写: <input v-on:keyup.enter="submit"> <input @keyup.enter="submit"> 全部的键盘别名: .enter .tab .delet

随机推荐