这是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...