当前位置: 首页 > article >正文

ComboBox.SelectedIndex的使用问题

最近有个窗体要用ComboBox控件,发现在捕获SelectedIndexChanged事件时总是有一些问题。趁周末测试了一下,现总结如下:


1、任何时候,SelectedIndex变化都触发SelectedIndexChanged事件。


2.1、重新生成列表(先清空再添加)时:ComboBox显示空,但SelectedIndex保持不变。


2.2、重新绑定列表(ResetBinding)时:ComboBox会努力保持SelectedIndex不变;当SelectedIndex小于等于新列表的最大下标时,CombBox会显示新列表相应位置的项;但当SelectedIndex大于列表的最大下标时,ComboBox会先将SelectedIndex置为新列表的最大下标,然后再重新绑定列表,ComboBox显示新列表中新SelectedIndex处的值。但千万不要以在这种情况下,SelectedIndexChanged中就能获得与界面一致的值,因为ComboBox在绑定新列表之前重置SelectedIndex的值,因此,你在SelectedIndexChanged中获得的只是旧列表的值。


3、在初次将列表绑定到数据源时:ComboBox会显示列表中第一个选项,但SelectedIndex仍然是-1。


由于SelectedIndex的以上特性,若ComboBox使用绑定列表并且列表会变化,则在使用SelectedIndexChanged事件实时将ComboBox的显示项映射到内部数据时,必须加以小心。否则将极有可能内部数据与界面显示数据不一致。
我还尝试过使用SelectedValueChanged事件来代替SelectedIndexChanged事件,但是发现SelectedValueChanged事件与SelectedIndexChanged的唯一区别在于:当使用ComboBox列表绑定,用户尚未进行过选择操作时,SelectedValueChanged会在ComboBox的显示值变化时被触发。只要用户执行过选择操作,该事件就再也不会被触发。猜测SelectedValueChanged应该只在SelectedIndex为-1的时候才有可能被触发。
最终,我还是只好老老实实的用SelectedIndexChanged。为避免出现问题,建议:若要对ComboBox的列表使用绑定,则在初次绑定和重新绑定后,重置SelectedIndex为-1,然后将其置为一个默认值,或尝试将SelectedItem置为旧列表中的选中项。测试证明SelectedItem设置成功时并且该项在新旧列表中位置不同时,SelectedIndexChanged会被触发。


注:2.1,2.2均指列表改变时的特征,2.2为使用数据绑定列表时的情况。
http://www.lryc.cn/news/2416621.html

相关文章:

  • native2ascii的使用
  • Ajax常用框架汇总
  • matlab 正交多项式,常用正交多项式
  • 深入浅出MFC:《深入浅出MFC》入手基础指南
  • 2023 情侣恋爱网站源码 带后台
  • ssm 宾馆信息管理系统 酒店管理系统 客房管理系统 java jsp web
  • C# wpf 使用GDI+实现截屏
  • CLOSE_WAIT状态的原因与解决方法
  • Bugku旧平台misc writeup
  • 简历上的工作经验(精选20篇)
  • 操作系统期末复习知识点总结
  • Sim3相似变换
  • C#常见开发的三种项目类型
  • 手机使用电脑共享网络
  • 张晨卸任京东CTO,京东的技术之路怎么走?
  • python calu()函数_Python学习笔记4:函数
  • 越狱必备插件
  • 论文阅读笔记-WF攻击入门基本概念
  • DataReader类型化数据读取与装箱性能研究
  • 资源网站-转自知乎
  • script什么意思中文翻译成,script的中文意思是什么
  • Android源码下载(包括最新8.0版本)
  • 一些时间日期函数,转自华软
  • Java 程序员新机必备程序清单
  • C语言的字节对齐
  • 前端必知必会-CSS布局display属性
  • 一篇文章搞懂RAID磁盘阵列
  • Delphi编程---可以进行四则运算的Tcalc类源代码
  • tftpd32+ tftpd64文件传输安装和使用教程【图文并茂】
  • 学生信息管理系统模块ExecuteSql 函数详解