Datarepeater не всегда вызывает событие CurrentItemIndexChanged

[Решено ниже. Опубликовано в случае, если у кого-то еще есть эта проблема.]

У меня есть форма с ретранслятором данных (далее "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 ответов

Другие вопросы по тегам