有一个简单的方法来禁用一个TreeView节点的自动展开/折叠当它被双击? 我一直无法找到这个问题的答案,如果没有在BeforeExpand / BeforeCollapse检查当前系统时间匹配预期双击工作 - 覆盖OnNodeMouseDoubleClick和/或OnDoubleClick似乎并不足够。
或者,是检查系统时间,看它是否符合双击要做到这一点的唯一途径?
感谢您的帮助,-Walt
有一个简单的方法来禁用一个TreeView节点的自动展开/折叠当它被双击? 我一直无法找到这个问题的答案,如果没有在BeforeExpand / BeforeCollapse检查当前系统时间匹配预期双击工作 - 覆盖OnNodeMouseDoubleClick和/或OnDoubleClick似乎并不足够。
或者,是检查系统时间,看它是否符合双击要做到这一点的唯一途径?
感谢您的帮助,-Walt
解决:其实,整个溶液在http://www.developersdex.com/gurus/code/831.asp 。 显然OnNodeMouseDoubleClick()是不是在树视图的WM_LBUTTONDBLCLK处理程序被调用。 。 。 这就是所谓的LBUTTONUP处理。 因此,下面是该网站是什么:
protected override void DefWndProc(ref Message m) {
if (m.Msg == 515) { /* WM_LBUTTONDBLCLK */
}
else
base.DefWndProc(ref m);
}
如果你想停止处理该节点的左侧,然后在OnNodeMouseDoubleClick()执行以下操作:
if (e.X >= e.Node.Bounds.Left) {
return;
}
还没有与任何到目前为止,我已经找到了答案多少运气,但沃尔特的答案这提供了灵感:
int treeX; // somewhere in class scope
// Add a MouseMove event handler
private void treeView1_MouseMove(object sender, MouseEventArgs e)
{
treeX = e.X;
}
// Add a BeforeExpand event handler
private void treeView1_BeforeExpand(object sender, TreeViewCancelEventArgs e)
{
if (treeX > e.Node.Bounds.Left) e.Cancel = true;
}
不过这个线程是老了......我没有找到这个问题的一个简单的解决方案,所以我研究了我自己。 这是结果:
继承其具有从树状视图所期望的行为专门的树状视图。 重写的MouseDown并检查它是否会为DoubleClick。 如果是这样,通过设置一个标志,以剿行动防止膨胀/收缩。 BeforeExpand /折叠被覆盖,如果标志设置取消操作。 你可以重新设置标志在BeforeExpand /关闭,事件处理程序,如果你想。
Public Class DblClickTreeview
Inherits TreeView
Private _SupressExpColl As Boolean = False
Private _LastClick As DateTime = Now
Protected Overrides Sub OnMouseDown(e As MouseEventArgs)
_SupressExpColl = Now.Subtract(_LastClick).TotalMilliseconds <= SystemInformation.DoubleClickTime
_LastClick = Now
MyBase.OnMouseDown(e)
End Sub
Protected Overrides Sub OnBeforeCollapse(e As TreeViewCancelEventArgs)
e.Cancel = _SupressExpColl
MyBase.OnBeforeCollapse(e)
End Sub
Protected Overrides Sub OnBeforeExpand(e As TreeViewCancelEventArgs)
e.Cancel = _SupressExpColl
MyBase.OnBeforeExpand(e)
End Sub
End Class