关于C# winform treeview 的两个问题(点击空白处的时间响应和复选框选择问题)
来源:互联网 发布:mysql 无需密码登录 编辑:程序博客网 时间:2024/05/01 14:08
这段时间正在研究这个控件,摸出了一些东西,给大家看看。
1:点击空白处的问题。
处理鼠标Up事件
private void Tree_MouseUp(object sender, MouseEventArgs e)
{
Point p = new Point(e.X, e.Y);
TreeNode selectNode = AuthTree.GetNodeAt(p);
bool isBlank = false;
if (selectNode == null)
isBlank = true;
else
{
if(selectNode.Bounds.Contains(e.X,e.Y) == false)
isBlank = true;
}
if (isBlank)
{
//处理选择空白
}
}
主要是根据鼠标坐标和节点的两个方法:根据坐标得到节点(GetNodeAt)和节点区域(Bounds)来处理。
2:复选框选择问题
我的想法是选中某个节点时将其所有子节点全部选中,当某节点有子节点选中时则选中这个节点,否则不选择这个
节点。
因为AfterCheck事件是递归触发的,所以处理不当就会进入死循环,我是进入死递归把程序堆栈塞满了。
最后我增加了一个变量保证了连续出发的方向,即从原节点开始,向上更新父节点,向下更新子节点,父节点
不能再向下,子节点也不能向上,解决了这个问题。
int level = -1;
private void Tree_AfterCheck(object sender, TreeViewEventArgs e)
{
TreeNode operateNode = e.Node;
if (this.level == -1)
{
this.level = e.Node.Level;
CheckFatherNode(operateNode);
CheckAllSubNodes(operateNode, operateNode.Checked);
}
else
{
if(e.Node.Level < this.level)
CheckFatherNode(operateNode);
else if(e.Node.Level > this.level)
CheckAllSubNodes(operateNode, operateNode.Checked);
}
}
- 关于C# winform treeview 的两个问题(点击空白处的时间响应和复选框选择问题)
- TreeView点击空白处的问题
- C# winform TreeView中关于checkbox选择的完美类
- Jquery 和关于 复选框 的问题
- C# winform TreeView中关于checkbox选择的完美类(转载)
- TreeView节点复选框的点击事件
- C#TreeView复选框的选择
- C#中关于TreeView的WinForm编程
- 关于TreeView的问题
- c# winform treeview的绑定和遍历
- C# WinForm下DataGridView单选按钮列和支持三种选择状态的复选框列的实现
- C# WinForm下DataGridView单选按钮列和支持三种选择状态的复选框列的实现
- 关于winform下treeview中CheckBox选择的方法
- 关于下拉框,复选框的问题
- 关于struts2复选框的问题
- 关于C++和C#选择的问题---ShinePans
- No 134 · C#TreeView复选框的选择
- C#关于TreeView里面拖拽的一些问题
- c#中邮件收发处理(POP3,IMAP,SMTP)
- 中英对照UNIX操作系统
- 简明批处理教程
- 玩转 Log4Net 五步走
- 根据窗口大小自动调整元素大小
- 关于C# winform treeview 的两个问题(点击空白处的时间响应和复选框选择问题)
- oracle自增长字段
- 监听到了CTabItem的关闭事件后,如何不关闭它
- abap编程的一些例子 事件的触发及处理
- 读取硬盘序列号
- install oracle on linux
- 品味prototype1.6 新加入方法
- RSA算法
- log4j介绍和使用方法