Double click

Обнаружил забавную вещь. Если в контроле treeview захотеть запретить uncheck некоторых узлов дерева, то это легко сделать BeforeCheck обработчиком. Однако, если работаешь под windows 2008 or Vista это не срабатывает, если кликаешь на чек бокс очень быстро. То есть, если раньше двойной клик сопровождался событием одинарного клика, то теперь этого не происходит. В результате галки, которые ты хочешь запретить снимать, спокойно снимаются. Конечно можно настроить длительность двойного клика в свойствах мыши, но это же строго индивидуально. И потом я видел человека, который жал на мышь быстрее, чем крайнее правое значение Fast. А еще двойной клик запатентован Microsoft. Может стоить подать на нее в суд за кривизну патента? Глядишь тогда отсужу миллион и куплю пару учебников по информатике. А то совсем отстал от жизни. Может я ошибаюсь?

       private void treeViewReplCards_BeforeCheck(object sender, TreeViewCancelEventArgs e)
        {
            if (e.Node.Tag.ToString().Contains("DA86FABF-4DD7-4A86-B6FF-C58C24D12DE2^")  //"FoldersCard" 
                || e.Node.Tag.ToString().Contains("05E4BE46-6304-42A7-A780-FD07F7541AF0^")  //"SavedSearch" 
                || e.Node.Tag.ToString().Contains("17F8F0B3-7E93-45E9-B250-EED4E93F3FA3^")  //"SavedView" 
                || e.Node.Tag.ToString().Contains("BE14D55D-92B7-4345-AD10-32588981F83D^")  //"RefTypes" 
                )
            {
                if (e.Node.Checked == true)
                {
                    e.Cancel = true;
                }
            }
        }

Прикрепленный файлРазмер
Package icon Delphi_VistaTreeViewBeforeClick.zip223.98 KB

Комментарии

Изображение пользователя Serguei_Tarassov.

Еще один повод

Еще один повод подумать перед переходом на Висту... Давай проверим, это глюк WinForms или изменения на уровне WinAPI? Я могу тебе сделать маленькое приложеньице для теста на Delphi, а ты проверишь.

P.S. Код лучше выделять тегом pre

Изображение пользователя ipanshin.

why not? Сделай.

why not? Сделай. Если глюк сохранится, то на уровне WinAPI, если нет то WinForms?
Да, точно также ведет себя и windows 2008 server.

Изображение пользователя Serguei_Tarassov.

Готово

Готово. Прикрепил файл к твоему сообщению внизу, скачай :)

P.S. В Delphi используется событие Click.

Изображение пользователя ipanshin.

Нет, это не

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

Изображение пользователя Serguei_Tarassov.

Все нормально

Все нормально, у меня обратное - галка на "Item 1" не ставится, если ты поставишь условие внизу. Это ничем не отличается от запрета снимать галку.

Изображение пользователя ipanshin.

Да, галка

Да, галка ставится при условии внизу. Глюк сохранился и на дельфийском приложении.

Изображение пользователя Serguei_Tarassov.

Трындец

Трындец. Здравствуй, Виста Новый Год....

Изображение пользователя ipanshin.

Я проверял на

Я проверял на windows 2008 server. Не пора ли идти наниматься в управдомы?:)

Изображение пользователя Serguei_Tarassov.

Проверь на

Проверь на висте у кого-нить, пожалуйста. Для чистоты эксперимента. У меня сейчас висты в пределах досягаемости нет.

P.S. Коллеги с работы подтвердили проблему на висте.