首先,测试几个模块里分别添加如下几行:
int id = convert.toint32(cbocategory.selectedvalue);messagebox.show(id.tostring());
1.在cbocategory_selectedindexchanged() cbocategory_selectedvaluechanged()中添加,编译无法通过,报错如下:
无法将类型为“myproject.model.category”的对象强制转换为类型“system.iconvertible”。
2.在普通方法或者load事件里,添加,则可以正常通过。
(原创内容,elig首发于博客园,转载请注明出处)
然后,测试代码改为如下:
category id = (category)(cbocategory.selectedvalue);if (id == null){ messagebox.show("test");}
1.在普通方法里调用,第一行可以正确编译通过,id == null 条件成立
2.在load事件,以及selectionchangecommitted,selectedindexchanged,selectedvaluechanged事件里,都报错如下:
无法将类型为“system.int32”的对象强制转换为类型“myproject.model.category”。
最后,测试如下代码:
messagebox.show(cbocategory.selectedindex.gettype().tostring());string str = cbocategory.selectedvalue.tostring();messagebox.show(str);int id = convert.toint32(str);messagebox.show(id.tostring());
1.load事件 普通方法 以及 selectionchangecommitted事件 都可以得到预期结果。
type : system.int32
2.而selectionchangecommitted,selectedindexchanged事件里
type : system.int32
str = myproject.model.category
转int后出错
(原创内容,elig首发于博客园,转载请注明出处)
虽然当时没有想明白问题到底出在哪里,但是解决方法就是上面提到的,把需要实现的代码写到selectionchangecommitted事件里,就可以正常地得到预期的结果。
项目结束后花了点时间仔细研究了下这个问题,因为同样的代码放在不同的地方却会出现如此丰富多彩的结果,实在让人忍不住。
最后发现,我们如果在selectedindexchanged,selectedvaluechanged两者任意一个事件里,把测试代码加到如下if判断里:
view sourceprint?1
if (cbocategory.selectedindex >= 1){//测试代码}
那么3个事件都能正常编译通过。
注意:问题就出在这个红色的1上,在selectedindexchanged,selectedvaluechanged里,只能判断到index >= 1
有人就要问了,combobox的index不是从0开始的吗?
非常正确!
但是只要把条件改为 >= 0 那么窗体加载时必定报错。
我们来看看这3个事件的区别:
selectedindexchanged,selectedvaluechanged是在任何情况下,只要改变了它们监视的值(index或者valuemember)就会触发对应事件
而我们都知道,在控件生成的时候,这2个值不可避免地要发生改变。也就是说,每次改变都会触发这个事件。
而selectionchangecommitted事件,官方的翻译解释是:当从下拉列表中选择项而下拉列表关闭时发生。
但是实际是这个翻译是不准确的,因为我装的不是英文的vs环境,所以无从知晓原文如何,但是实际上,该事件个人理解,更准确的翻译是,用户对该控件的选择项作出任何改变时发生。
这个“任何”包括:鼠标点击,获得焦点的情况下方向键上下选择。
(原创内容,elig首发于博客园,转载请注明出处)
在我的问题中,selectedindexchanged,selectedvaluechanged无法正确运作,是因为同样的代码在这两个事件中,无法对index = 0的item做处理,或者说selectedvalue的值不明确。从index = 1开始,selectedvalue的(int)转换非常正常。但是正因为这两个事件连系统对combobox控件作出的改动都会监视,所以不可避免的会在生成第一行的时候即触发事件,导致接触到不正常的index = 0的行。
暗影猎手失落的世界 最新版本v30.118.6.0
下载格里姆瓦勒完全版 安卓版v1.2.0
下载忍者武士暗影格斗无限金币版 安卓版v1.82.1
下载忍者必须死34399账号登录版 最新版v1.0.138v2.0.72
下载创造与魔法免登录版 手机版v1.0.0760
创造与魔法是一款高度自由的沙盒冒险手游,该游戏采用了3D最新
创造与魔法gm版 安卓版v1.0.0760
创造与魔法是一款有英雄互娱运营的一款经营沙盒建造手游,该游戏
创造与魔法变态无敌版 v1.0.0760
创造与魔法是一款3DQ版的沙盒模拟建造手游,在这里玩家需要适
腾讯普通话小镇游戏 安卓版v2.2.5
普通话小镇是由腾讯游戏追梦计划推出发行的模拟经营类型普通学习
海岛村 最新版v1.0
海岛村是一款非常好玩的模拟经营类手游,玩家在游戏中将会有一个