C#System.Windows.Forms.TreeView:停止自动扩大双击/折叠(和执行另一个

2019-07-02 16:22发布

有一个简单的方法来禁用一个TreeView节点的自动展开/折叠当它被双击? 我一直无法找到这个问题的答案,如果没有在BeforeExpand / BeforeCollapse检查当前系统时间匹配预期双击工作 - 覆盖OnNodeMouseDoubleClick和/或OnDoubleClick似乎并不足够。

或者,是检查系统时间,看它是否符合双击要做到这一点的唯一途径?

感谢您的帮助,-Walt

Answer 1:

解决:其实,整个溶液在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;
}


Answer 2:

还没有与任何到目前为止,我已经找到了答案多少运气,但沃尔特的答案这提供了灵感:

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;
}


Answer 3:

不过这个线程是老了......我没有找到这个问题的一个简单的解决方案,所以我研究了我自己。 这是结果:

继承其具有从树状视图所期望的行为专门的树状视图。 重写的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


文章来源: C# System.Windows.Forms.TreeView: Stop auto expand/collapse on double-click (and execute another handler)