这是C#的一个漏洞,Microsoft在TreeView控件中自作主张地做成双击节点时自动展开/折叠节点。然而如果用户自定义NodeMouseDoubleClick事件,同时又不希望改变结点的展开/折叠状态,就无法直接达到这一效果。可以通过曲线救国的方式达到了目的。

首先声明一个全局变量:

public int m_MouseClicks = 0; //记录鼠标在myTreeView控件上按下的次数

再分别重载三个事件:

//获取鼠标在myTreeView控件按下的次数,并赋给全局变量m_MouseClicks
private void myTreeView_ MouseDown(object sender, MouseEventArgs e)
{
this.m_MouseClicks = e.Clicks;
}

//myTreeView控件节点折叠之前判断鼠标按下的次数,并进行控制
private void myTreeView_BeforeCollapse(object sender, TreeViewCancelEventArgs e)
{
e.Cancel = (this.m_MouseClicks > 1);
}

//myTreeView控件节点折叠之前判断鼠标按下的次数,并进行控制
private void myTreeView_ BeforeExpand(object sender, TreeViewCancelEventArgs e)
{
e.Cancel = (this.m_MouseClicks > 1);
}

有点绕弯,也是没有办法中的办法。

C# 窗体应用 TreeView 控件使用 TreeView 控件在窗体应用里面使用也是频率比较高的,我们在使用 TreeView 一般是对资源的分层展示,类似数据结构里面树的凹入表示法。很多公司都是使用 TreeView 控件作为文件显示信息的分级视图,如同Windows里的资源管理器的目录。 TreeView 控件中的各项信息都有一个与之相关的Node对象。 TreeView 显示Node对象的分层目录结构,每个Node对象均由一个Label对象和其相关的位图组成。在建立 TreeView 控件后,可以 展开 折叠 、显示或 在构造函数里面有一个参数 displaycolumns=['c1','c2',...,'cn'],设置显示的列。columns=['c1','c2',...,'cm']设置所有的列(m>n)。理论上讲,只通过控件是无解的。有一个问题就是,这个values只有text,通常web的selection都会有(value,text)这样的组合,这里有些小不足。Label(f, text=u'产品编号(*)', fg='blue', font=ft1).grid(row=1,column=1, sticky=W) 上图所示, TreeView 控件有CheckBox选框, 鼠标 在对CheckBox 状态 进行 改变 时,快速 双击 代码运行时会发现CheckBox的显示 状态 发生变化但实际上 节点 的选中 状态 与显示的 状态 不一致,也就是快速 双击 时CheckBox 状态 无法正常响应。在网上查资料,验证后发现该方法可行 class TreeView Ext: TreeView protected override void WndProc(ref Message m) this.NodeMouseDoubleClick += new System.Windows.Forms.TreeNodeMouseClickEventHandler(this. treeView 1_DoubleClick); private void treeView 1_DoubleClick(object sender, TreeNodeMouseClickEventArgs e) //获取 节点 数据 string text 问题描述: 提示:Q TreeView 使用 折叠 功能expandAll是可以 展开 所有的 节点 ,但是在做项目的时候需要 展开 指定位置的 节点 ,这时候尝试使用Expand方法: index函数: QModelIndex index(int row, int column, const QModelIndex &parent = QModelIndex()) const Q_DECL_OVERRIDE; 使用方法: m_ treeView = new Q TreeView (); 在使用树形控件实现项目分组功能时,默认情况下 双击 QTreeWidget的Item,如果该Item含有子Item那么Item就会被 展开 或收缩,而若是想要 改变 分组的 展开 及收缩 状态 ,使用QTreeWidget的一个函数即可,void setItemsExpandable ( bool enable ), 该函数从Q TreeView 继承。设置是否允许用户 展开 和收缩Item。 设置的itemsExpandable,默认是true。设置为false即不允许用户收缩/... element-ui中的el-tree在添加或者删除子 节点 后,也就是每次数据刷新后树就会收上去,但是如果我们还需要在当前 节点 下进行后续操作,而且有很多层 节点 的情况下,就很麻烦了,对用户体验感非常差,那么怎么解决呢? 有时候我们对树控件的 双击 默认操作不太满意,比如我们在 双击 一有子 节点 节点 的时候不希望打开或关闭它的子 节点 而想执行一个特定的操作,这时怎么来写呢,我这里有一个办法可以做到这一点:using System;using System.Drawing;using System.Collections;using System.ComponentModel;using System.Windows.Form 以上方法本人实现简单,不喜欢折腾的人就直接用它吧 本人有强迫症也喜欢折腾,于是看源码,查看它是怎么通过消息来实现的,果然找到了对应的实现;我的思路是重写WndProc来拦截它。实现起来比较复 <UserControl.Resources> <local:CITypeOfStateIconVisiblityConverter x:Key="xCITypeOfStateIconVisiblityConverter" /> <local:ToolTipEmptyConve...