Wariant 1: Całkowicie wyłączyć kliknij dwukrotnie zdarzenie.
utworzyć formant klienta
class MyTreeView : TreeView
{
protected override void WndProc(ref Message m)
{
if (m.Msg == 0x0203)
{
m.Result = IntPtr.Zero;
}
else
{
base.WndProc(ref m);
}
}
}
aw pliku projektanta (form.Designer.cs) poszukaj gdzie kontrola została stworzona i zastąpić wywołanie konstruktora TreeView z nowego kontrolą.
this.treeView1 = new MyTreeView();
Opcja 2: Potraktowano kliknij dwukrotnie zdarzenie w postaci dwóch pojedynczych zdarzeń kliknięcia
class MyTreeView : TreeView
{
protected override void WndProc(ref Message m)
{
if (m.Msg == 0x0203)
{
m.Msg = 0x0201;
}
base.WndProc(ref m);
}
}
Osobiście myślę, że opcja 2 jest bardziej intuicyjne. Gdy użytkownik kliknie dwukrotnie to pole wyboru, pole wyboru nie jest zaznaczone.
Udało się idealnie. Dziękuję bardzo. –
Wiedziałem, że musi być lepsza droga niż to, z czym ja odpowiedziałem, ale nie mogłem tego rozgryźć. +1 – TaRDy
Nie jestem pewien, czy to działa. Błąd wydaje się właściwie zatykać wszystkie zdarzenia z podwójnym kliknięciem. Jeśli klikniesz dwukrotnie pole wyboru, żadne zdarzenia z podwójnym kliknięciem nie będą się uruchamiać. Jeśli naciśniesz jedno kliknięcie w dowolnym miejscu, * wtedy * zdarzenia z podwójnym kliknięciem będą uruchamiane, ale ponieważ wystrzelili tak późno, otrzymają błędne informacje w swoich zdarzeniach. –