Как обрабатывать сообщения Windows

Я пытаюсь предотвратить проверку флажка внутри ListView на событие двойного щелчка.

Я уже сделал:

listView.SelectedItems[0].Checked = (listView.SelectedItems[0].Checked) ? false : true;

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

Я наткнулся на этот ответ: Предотвращение вмешательства события ItemChecked в ListView в SubItemClicked с помощью C#

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

Может ли кто-нибудь пролить мне свет на это, пожалуйста?

Большое тебе спасибо!


person Tommy B.    schedule 07.10.2011    source источник


Ответы (1)


Просто реализуйте событие ItemCheck. Вы можете отменить проверку, изменив свойство e.NewValue. Глупый пример:

    private void listView1_ItemCheck(object sender, ItemCheckEventArgs e) {
        // Disable checking odd numbered items
        if (e.Index % 2 == 1) {
            e.NewValue = e.CurrentValue;
        }
    }
person Hans Passant    schedule 07.10.2011
comment
Спасибо за помощь, но я не могу найти событие ItemCheck в событиях моего ListView?! :-/ - person Tommy B.; 08.10.2011
comment
Даже если я его не нашел, я решил добавить себе событие в свой файл Designer.cs (this.listView.ItemCheck += new System.Windows.Forms.ItemCheckEventHandler(this.listView_ItemCheck);) - person Tommy B.; 08.10.2011
comment
Ваш код не препятствует проверке двойным щелчком :-/ Я попытаюсь что-то сделать из этого события. - person Tommy B.; 08.10.2011
comment
Это не мешает мне установить флажок при двойном щелчке :-/ Он все еще проверяется. Я не знаю, имеет ли это какое-то отношение к этому, но, к вашему сведению, у меня также есть событие двойного щелчка. - person Tommy B.; 08.10.2011
comment
Я не смогу помочь вам с этими загадочными проблемами, если вы только дадите мне диагностику «это не работает». Давайте сосредоточимся на отсутствующем событии ItemCheck. Какая версия VS, какая версия .NET, какая версия Windows? Разместите небольшой репродукционный проект на файлообменнике. - person Hans Passant; 08.10.2011
comment
Я использую VS2010 SP1 (v10.0.40219.1), работаю с .NET v4.0.30319 на Windows 7 64bit SP1. Вот исходный код моего репозитория на github github.com/tbergeron/todoTxt/blob/master. /MainForm.cs Спасибо! - person Tommy B.; 08.10.2011
comment
Событие ItemCheck находится в строке 136, а событие DoubleClick — в строке 123. - person Tommy B.; 08.10.2011