Дважды щелкните поведение на флажке TreeNode.

У меня есть TreeView, заполненный TreeNodes, имеющим значки и флажки.

Я пытался отключить возможность проверки/снятия отметки некоторых из них, отбрасывая событие в методе BerforeCheck. Это работает нормально, пока я дважды не щелкну флажок: изображение флажка противоположно его реальному состоянию (он показывает галочку, если статус Checked=false). Я безуспешно пытался исправить это изменение StateImageIndex вручную в методах NodeDoubleClick и BeforeClick.

Еще хуже: я добавил третье изображение в StateImageList (да, я хочу, чтобы флажки тоже были с тремя состояниями), но я его еще не использую (в моем коде оно никогда не устанавливается), а третье изображение установлено как текущее состояние коробки после некоторого двойного щелчка (на данный момент я не могу определить четкое поведение).

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

PS: вопрос уже был задан, но на него не было ответа. ..


person gregseth    schedule 16.03.2011    source источник
comment
Я протестировал его, и в основном, когда вы дважды щелкаете по флажку, изменение проверки обнаруживается только один раз. В чем именно проблема? Можете ли вы опубликовать код?   -  person digEmAll    schedule 16.03.2011
comment
P.S. Я использую XP в данный момент, возможно, это проблема только Vista/Seven ...   -  person digEmAll    schedule 16.03.2011
comment
Проблема в том, что после двойного щелчка изображение чекбокса меняется дважды (как при двух кликах), а состояние чекбокса меняется только один раз => бессвязное поведение. Кроме того, не так много кода для показа, это в основном поведение компонента по умолчанию... Кстати, я использую Vista.   -  person gregseth    schedule 16.03.2011
comment
Когда я дважды щелкаю флажок узла, изображение (под изображением я имею в виду флаг флажка) и проверенное состояние узла меняются только один раз, поэтому я не могу воспроизвести проблему... возможно, это нормально на XP :(   -  person digEmAll    schedule 16.03.2011
comment
Да, подтверждаю, на XP работает нормально, а в Win 7 у меня та же проблема, что и у вас...   -  person digEmAll    schedule 17.03.2011
comment
Это может быть связано с платформой .NET, поставляемой с ОС... знаете ли вы, какую из них вы использовали для своих тестов?   -  person gregseth    schedule 18.03.2011
comment
Я использовал .net 3.5. В любом случае, проблема определенно в ОС, потому что я использовал один и тот же исполняемый файл в обеих ОС, и на xp все было в порядке, а на W7 проблема появилась ...   -  person digEmAll    schedule 19.03.2011


Ответы (1)


Попробуйте это .. :) сработало для меня

public class NewTreeView : TreeView
    {
        protected override void WndProc(ref Message m)
        {
            if (m.Msg == 0x203)
                m.Result = IntPtr.Zero;
            else
                base.WndProc(ref m);
        }
    }
person Varsha    schedule 11.04.2011