关于C# winform treeview 的两个问题(点击空白处的时间响应和复选框选择问题)
2008-01-16 15:58
661 查看
这段时间正在研究这个控件,摸出了一些东西,给大家看看。
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);
}
}
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中关于checkbox选择的完美类(转载)
- C# winform TreeView中关于checkbox选择的完美类(转载)
- 关于bootstrap的treeview不显示多选(复选框)的问题,以及联动选择的问题,外加多选后取值
- C# winform TreeView中关于checkbox选择的完美类
- 关于C# WinForm中“显示桌面后”,点击任务栏右下角图标还原的问题 - [IT技术] 2011-
- C# winform TreeView中关于checkbox选择的完美类[转]
- 关于在c#中创建用户控件后,winform应用程序在调用中无法通过点击用户控件的子控件为其自动添加事件代码的问题
- 关于Button点击两次才响应事件相关问题
- 关于C++和C#选择的问题---ShinePans
- 关于winform中treeview最后一个节点显示不全的问题
- 问题:C#时间差;结果:C# 使用TimeSpan计算两个时间差
- 关于C#中实现两个应用程序消息通讯的问题
- C#关于DateTime得到的当前时间的格式问题
- 关于C#中实现两个应用程序消息通讯的问题
- C#Winform TreeView节点选择影响其父子节点选中状态(递归)
- c#,winform,contextmenutrip,treeview,右键快捷菜单,定位问题,当前节点
- 关于JIRA中线上问题首次响应时间的统计
- 关于C#中实现两个应用程序消息通讯的问题
- C#关于DateTime得到的当前时间的格式问题(转 自己用)
- C#中关于时间格式的处理问题