Datarepeater并不总是引发CurrentItemIndexChanged事件

时间:2016-06-26 16:34:37

标签: vb.net forms datarepeater

[解决,下面。发表以防其他人有这个问题。]

我有一个带有datarepeater的表单(' DR'今后)显示多行。 DR中的一个控件是一个复选框。当用户单击其中一行中的ckeckbox时,该行将成为当前记录,将引发Checkbox_click事件,并且该事件处理程序中的代码使用DR.CurrentItemIndex来处理当前记录。

当表单是Windows活动表单(具有焦点)时,这非常有效。将鼠标悬停在一个复选框(不是当前项目)上,它会变为蓝色,单击它,它的行变为当前,并且复选框会切换。

当窗体不是Windows活动窗体时,会出现问题。例如,单击桌面,然后将鼠标悬停在表单上的复选框(而不是当前项目)上,然后单击,DR CurrentItemIndex不会更改。

我已经跟踪了一些引发的事件,看看会发生什么。 在这里,' a'是当前项目,点击行' b'复选框:

如果表格有焦点:

1. Checkbox Hover (prior to click)
2. DR DrawItem (a)
3. DR DrawItem (b)
4. DR CurrentItemChanged (to b)
5. Checkbox click 

如果表格没有焦点:

1. CheckBox Hover (prior to click)
2. Form activated
3. Checkbox click

永远不会引发DR CurrentItemIndexChanged事件。

因为Checkbox_click处理程序中的代码使用DR.CurrentItemIndex,所以在上面的第二种情况下,它使用了错误的索引,因此程序出现故障。

如何让DR一致行动?或者,作为一种解决方法,Checkbox_click处理程序如何获得正确的ItemIndex?

[解决] 在ck_MouseHover事件处理程序中:

Me.Focus

(这么简单的解决方案花了这么长时间!)

0 个答案:

没有答案