zhbchwin 发表于 2015-6-29 22:37:00

CheckBoxCell的点击和RowEnter事件


口 行1
?行2

MultiRow第一列为CheckBoxCell,并且有RowEnter事件。
点击不同行的CheckBox时,只触发RowEnter事件,而没有选中那行的CheckBox,必须点两下CheckBox才行。
这是怎么回事?

Alice 发表于 2015-6-30 09:15:00

回复 1楼zhbchwin的帖子

感谢对该问题的反馈。
根据你的描述,按照如下步骤测试,并未重现你的问题。
测试步骤:
1.Template上按照1楼所示摆放CheckBoxCell和TextBoxCell。
2.在运行时,鼠标直接点击CheckBoxCell的单元格。
结果:CheckboxCell的check状态会发生改变。

请提供重现该问题的必然步骤和Demo,我可以帮你看看问题出在哪里。

zhbchwin 发表于 2015-6-30 10:16:00

回复 2楼Alice的帖子

谢谢你及时回答。
我做的简单的Demo也可以,但那个开发Framework中不行。
刚才发现原因了。
因为点下CheckBox之后,在RowEnter里调了改变Me.Cursor的处理,导致了这个问题。
去掉鼠标样式改变的处理就没问题。

但是这两个怎么关联到一块去了。。。

Alice 发表于 2015-6-30 14:23:00

回复 3楼zhbchwin的帖子

你好。
根据你的描述,你在RowEnter中设置的代码逻辑影响到了checkbox的点击。
请将您使用的RowEnter的代码发给我,我帮你看看是哪里出了问题。

zhbchwin 发表于 2015-6-30 23:19:00

RowEnter代码:
Application.DoEvents()
Me.Enabled = False
Me.Cursor = Cursor.WaitCursor
'xxx 自己的处理
Application.DoEvents()‘起因,去掉这句正常,加上就不正常
Me.Cursor = Cursor.Default
Me.Enabled = True

Carl 发表于 2015-7-1 11:59:00

Application.DoEvents 是一个功能强大但是副作用很多的方法。调用它会导致原本的同步操作变成了异步操作。
在这个Case中,MouseDown触发了RowEnter,在RowEnter中调用了DoEvents,导致消息队列中的MouseClick和MouseUp被处理,但是MouseDown这个时候还没处理完。
因为处理鼠标点击的时候内部状态还没有同步正确,结果就导致这次鼠标点击无法修改CheckBox的状态。

zhbchwin 发表于 2015-7-1 12:57:00

回复 6楼Carl的帖子

谢谢回答。
原来是这么回事啊。。
不懂.Net Framework,都不知道Application.DoEvents。。。

Alice 发表于 2015-7-1 15:14:00

回复 7楼zhbchwin的帖子

谢谢@carl 版主的耐心回复。

@zhbchwin 如果有什么问题欢迎提出来讨论。如果没有问题,这个帖子会被关闭。

zhbchwin 发表于 2015-7-1 16:51:00

回复 8楼Alice的帖子

没问题了,麻烦关了吧

Alice 发表于 2015-7-1 17:00:00

回复 9楼zhbchwin的帖子

好的,谢谢你的反馈。
页: [1]
查看完整版本: CheckBoxCell的点击和RowEnter事件