Opzione 1: Completamente disabilitare il doppio evento click.
creare un controllo cliente
class MyTreeView : TreeView
{
protected override void WndProc(ref Message m)
{
if (m.Msg == 0x0203)
{
m.Result = IntPtr.Zero;
}
else
{
base.WndProc(ref m);
}
}
}
e nel vostro file di progettazione (form.Designer.cs), cercare dove è stato creato il controllo, e sostituire la chiamata al costruttore TreeView con il nuovo controllo.
this.treeView1 = new MyTreeView();
Opzione 2: Trattare un doppio evento click come due eventi click singoli
class MyTreeView : TreeView
{
protected override void WndProc(ref Message m)
{
if (m.Msg == 0x0203)
{
m.Msg = 0x0201;
}
base.WndProc(ref m);
}
}
Personalmente credo che l'opzione 2 è più intuitivo. Quando l'utente fa clic due volte sulla casella di controllo, la casella di controllo non è selezionata.
Ha funzionato perfettamente. Grazie mille. –
Sapevo che ci doveva essere un modo migliore di quello con cui ho risposto, ma non riuscivo a capirlo. +1 – TaRDy
Non sono sicuro che funzioni. Il bug sembra in realtà intasare tutti gli eventi di doppio clic. Se fai doppio clic su una casella di controllo, nessun evento di doppio clic viene attivato. Se fai clic su un singolo clic praticamente ovunque, * poi * gli eventi di doppio clic si attivano, ma poiché sono stati attivati così tardi, finiscono con informazioni errate nei loro eventarg. –