首页 新闻 论坛 群组 Blog 文档 下载 读书 Tag 网摘 搜索 .NET Java 游戏 视频 人才 外包 培训 数据库 书店 程序员
中国软件网
欢迎您:游客 | 登录 注册 帮助
  • TreeView控件如何取消已选中的项?SelectedNode根本没用!! [已结贴,结贴人:seai]
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-27 10:42:23 楼主
    TreeView控件默认会选中第一项--只要TreeView控件获得焦点(不论是否点击的是其中节点,还是空白处),都会有节点被选中。
    我希望点击TreeView控件的空白处时,不要选中第一项,请问各位如何实现啊??
    50  修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-27 10:46:031楼 得分:3
    我也正想知道,关注中
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-27 10:58:452楼 得分:5
    C# code
    private void treeView1_MouseUp(object sender, MouseEventArgs e) { TreeNode selectnode = this.treeView1.GetNodeAt(e.Location); if (selectnode == null) { this.treeView1.SelectedNode = null; } }
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-27 11:03:183楼 得分:0
    楼上的,不行。真怀疑你有没有试过。

    跟踪代码发现:
    如果点击的是treeview的空白处MouseUp后,SelectedNode是null了,
    但一跳出MouseUp事件,SelectedNode马上就恢复为第一项了。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-27 11:04:394楼 得分:0
    肯定是与treeview默认选择第一项有关--只要treeview得到焦点就会选中第一项。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-27 11:31:435楼 得分:20
    我试了,没问题.不过一但treeview获取焦点,第一个还是会选中的.
    C# code
    private void treeView1_MouseUp(object sender, MouseEventArgs e) { TreeNode selectnode = this.treeView1.GetNodeAt(e.Location); if (selectnode == null) { this.treeView1.SelectedNode = null; } } private void treeView1_BeforeSelect(object sender, TreeViewCancelEventArgs e) { if (e.Action == TreeViewAction.Unknown) e.Cancel = true; }


    再加一个事件.我试了,可以了.获取焦点后如果原来没有选中则仍没选中.
    如果在LZ处仍有问题,检查是否有什么事件冲突了.
    另: 我这是Form的
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-27 11:57:556楼 得分:0
    这样是可以了,真太感谢楼上朋友了,已经困扰我很长时间了!

    相在带来了另一个小小的问题就是,我本来在AfterSelect事件里有根据点击的节点,显示相应的内容的代码,如果什么节点也没点击,就清空那些内容。现在,如果点空白处AfterSelect就不执行了,这样之前显示的内容不能清空!

    有好办法解决吗
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-27 12:04:097楼 得分:5
    C# code
    private void treeView1_MouseUp(object sender, MouseEventArgs e) { TreeNode selectnode = this.treeView1.GetNodeAt(e.Location); if (selectnode == null) { this.treeView1.SelectedNode = null; //清空内容. } }
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-27 12:19:588楼 得分:5
    重写相关事件处理函数。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-27 13:21:509楼 得分:5
    给你两个思路吧
    1、重写treeview代码,就是自定义一个treeview控件,或者从treeview继承一下,修改里面的代码,难度有点高
    2、你多添加一个空白的节点,不想选择其他的时候,可以让这个空白的节点获得焦点啊,空白的节点,就是没有显示内容的焦点,就是text=“”的焦点,没有试过,LZ可以尝试一下
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-27 19:42:5210楼 得分:0
    感谢各位朋友的帮忙

    我改善了下,不知道会不会有别的问题出现,分享留待观察

            bool CancelfterEvent = false;
            private void treeView1_AfterSelect(object sender, TreeViewEventArgs e)
            {
                //设置显示
                this.label1.Text = this.treeView1.SelectedNode.Text;
            }

            private void treeView1_MouseDown(object sender, MouseEventArgs e)
            {
                if (treeView1.GetNodeAt(e.Location) == null)
                {
                    CancelfterEvent = true;
                    //清除显示
                    this.label1.Text = "";
                }
                else
                    CancelfterEvent = false;
                this.treeView1.SelectedNode = treeView1.GetNodeAt(e.Location);
            }

            private void treeView1_BeforeSelect(object sender, TreeViewCancelEventArgs e)
            {
                e.Cancel = CancelfterEvent;
            }
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-27 20:17:2011楼 得分:3
    up
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • Navymk
    • 等级:
    发表于:2008-05-27 20:22:2512楼 得分:3
    mark
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-27 20:30:0013楼 得分:1
    http://www.soasp.net/FilePage/200803/20080303214457.aspx
    编程技术资源网为您提供技术支持!
    修改 删除 举报 引用 回复

    网站简介广告服务网站地图帮助联系方式诚聘英才English 问题报告
    北京创新乐知广告有限公司 版权所有 京 ICP 证 070598 号
    世纪乐知(北京)网络技术有限公司 提供技术支持
    Copyright © 2000-2008, CSDN.NET, All Rights Reserved