话说上周末的时候,要给项目中添加一个小小的功能,本来还以为顶多半小时就能搞定的,结果折腾了一小时多还不甚其解,直到刚才Reflector一下才算明白,sigh~
起因是这样的,UI上有个TabControl,盛放好几个TagPage作为容器,TabPage里装载DataGridView显示数据之用,窗体加载时异步读取数据,数据读取完毕分组后加载到各自grid中;因为是TabPage的关系,不想用户还没选择该Tab就加载其grid,所以绑定了TabControl的Selected事件,触发之后才根据当前的Tab加载其grid,减少内存消耗
然而等到测试时才发现,虽然数据已经正确读取并且分组了,TabControl的Selected事件却死活不会触发,非得手动点击第n个Tab之后(n>1)才行(我在异步线程里调用了TabControl的SelectTab方法),刚开始一直以为是异步的原因(当时也没经过脑子好好考虑)因为急着下班,所以搁到今天才算解决
新建了一个测试项目,界面上拽了个TabControl,默认有2个Tab,另外还拽了个button,button的click事件里头加了行
让人见鬼的是同样不会触发TabControl的Selected事件,为什么?只好打开Reflector看个究竟:
1.TabControl.SelectTab()
再看看this.SelectTab(index)是咋回事://注意看set块
继续://注意看set块
继续: //注意看set块
再继续:
里面有个if判断: if(this.SelectedIndex != value)...
OMG, 白忙活一场 :) 另外,直接调用SelectedTab属性是不是更轻松呢?
ps. xm中山路今儿个下午的创意市集ms不咋样,白跑一趟,热得够呛...