Предотвратите событие ItemChecked на ListView от вмешательства с SubItemClicked, используя C # - PullRequest
1 голос
/ 18 июня 2010

Я использую редактируемый вид списка на месте для проекта.

Редактируемый список добавляет событие SubItemClicked, чтобы каждая ячейка могла быть отредактирована.

lstSD2.SubItemClicked += new ListViewEx.SubItemEventHandler(lstSD2_SubItemClicked);

У меня также включены флажки просмотра списка с событием ItemChecked.

Проблема в том, что после включения события ItemChecked двойной щелчок в любой строке вызывает событие ItemChecked и предотвращает запуск события SubItemClicked.

Есть ли способ обеспечить необходимость «проверять» флажок просмотра списка вместо срабатывания при двойном щелчке по строке?

Одним из возможных решений является отключение представления DoubleClickActivation в виде списка:

this.lstShuntData2.DoubleClickActivation = false;

Основным недостатком этого является то, что пользователи могут посчитать, что просмотр списка слишком чувствителен к любому щелчку мыши.

1 Ответ

3 голосов
/ 19 июня 2010

.NET специально добавляет эту функцию в ListView.Не спрашивай меня почему.

Чтобы избавиться от него, прослушайте NM_DBLCLK отраженное уведомление, и в обработчике сделайте это: *

NativeMethods.NMHDR nmhdr = (NativeMethods.NMHDR)m.GetLParam(typeof(NativeMethods.NMHDR));

switch (nmhdr.code) {
case NM_DBLCLK:
    // The default behavior of a .NET ListView with checkboxes is to toggle the checkbox on
    // double-click. That's just silly, if you ask me :)
    if (this.CheckBoxes) {
        // How do we make ListView not do that silliness? We could just ignore the message
        // but the last part of the base code sets up state information, and without that
        // state, the ListView doesn't trigger MouseDoubleClick events. So we fake a
        // right button double click event, which sets up the same state, but without
        // toggling the checkbox.
        nmhdr.code = NM_RDBLCLK;
        Marshal.StructureToPtr(nmhdr, m.LParam, false);
    }
    break;

Это одна из многих проблем, которые ObjectListView решает за вас.Даже если вы не используете весь проект, вы можете посмотреть на исходный код и выяснить, как это сделать самостоятельно.

...