12
A
回答
4
如果你只是想知道一個DoubleClick事件從發生的CheckBox:
private void TreeViewDoubleClick(object sender, EventArgs e)
{
var localPosition = treeView.PointToClient(Cursor.Position);
var hitTestInfo = treeView.HitTest(localPosition);
if (hitTestInfo.Location == TreeViewHitTestLocations.StateImage)
return;
// ... Do whatever other processing you want
}
9
選項1:完全禁用雙擊事件。
創建用戶控制
class MyTreeView : TreeView { protected override void WndProc(ref Message m) { if (m.Msg == 0x0203) { m.Result = IntPtr.Zero; } else { base.WndProc(ref m); } } }
和你的設計師文件(form.Designer.cs),尋找控制被創造在哪裏,並更換新的控制調用TreeView的構造。
this.treeView1 = new MyTreeView();
選項2:治療雙擊事件爲兩個單點擊事件
class MyTreeView : TreeView { protected override void WndProc(ref Message m) { if (m.Msg == 0x0203) { m.Msg = 0x0201; } base.WndProc(ref m); } }
我個人認爲選擇2更直觀。當用戶單擊複選框兩次時,複選框未被選中。
11
我發現這個問題時,谷歌搜索相同的錯誤。 NoodleFolk的解決方案的問題是,它通過雙擊一個項目禁用擴展三。通過結合NoodleFolk與約翰arlens答案的答案,你會得到這樣的事情:
class NewTreeView : TreeView
{
protected override void WndProc(ref Message m)
{
if (m.Msg == 0x203) // identified double click
{
var localPos = PointToClient(Cursor.Position);
var hitTestInfo = HitTest(localPos);
if (hitTestInfo.Location == TreeViewHitTestLocations.StateImage)
m.Result = IntPtr.Zero;
else
base.WndProc(ref m);
}
else base.WndProc(ref m);
}
}
我(快速)測試該解決方案,它似乎工作。
0
綜合以上的答案,我發現這對我來說是最好的解決方案。雙擊節點以展開其子項仍然有效,只有雙擊複選框纔會受到影響和修復:
class MyTreeView : TreeView
{
protected override void WndProc(ref Message m)
{
if (m.Msg == 0x0203 && this.CheckBoxes)
{
var localPos = this.PointToClient(Cursor.Position);
var hitTestInfo = this.HitTest(localPos);
if (hitTestInfo.Location == TreeViewHitTestLocations.StateImage)
{
m.Msg = 0x0201;
}
}
base.WndProc(ref m);
}
}
相關問題
- 1. 忽略點擊TListView複選框
- 2. 如何忽略複選框的點擊?
- 3. Java:忽略單擊雙擊?
- 4. TreeView複選框僅對雙擊作出響應
- 5. jQuery動畫:忽略雙擊
- 6. treeview複選框
- 7. TreeView控件。複選框。並點擊
- 8. CakePHP複選框 - 忽略未選中的複選框
- 9. 在TreeNode複選框上雙擊beavior
- 10. 在.NET/C中的TreeView雙擊行爲#
- 11. JQuery複選框Treeview
- 12. 複選框,單擊忽略,如果父母已綁定的onclick
- 13. 如何忽略td內的複選框
- 14. 忽略複選框,即禁用
- 15. asp.net treeview複選框選擇
- 16. C#幫助treeview和複選框內容
- 17. C#Winforms Treeview自定義複選框
- 18. TreeView雙擊事件
- 19. 在iPhone收音機和複選框選項只能雙擊工作
- 20. WPF TreeView和複選框
- 21. 擴展.NET TreeView複選框
- 22. 禁用ASP.net treeview複選框
- 23. treeview複選框菜單
- 24. kendoui treeview中的複選框
- 25. Pyqt treeview與複選框
- 26. TreeView關閉複選框
- 27. 忽略重置字段時選中複選框在PHP形式
- 28. 只在Kendo Treeview上顯示子節點的複選框
- 29. TreeView控件:複選框只在子節點
- 30. 複選框:一次只允許單擊一個複選框
它工作得很好,非常感謝您。 –
我知道必須有比我回答的更好的方式,但無法弄清楚。 +1 – TaRDy
我不確定這是否有效。該錯誤似乎實際上阻塞了所有的雙擊事件。如果雙擊一個複選框,則根本不會發生雙擊事件。如果你在任何地方單擊幾次,*然後*雙擊事件觸發,但因爲他們被解僱這麼晚了,他們的事件中就會出現錯誤的信息。 –