asp.net winform TreeView节点中的CheckBox 禁用实例

 

发现TreeNode没有相关属性,TreeView中的CheckBox也基本没法控制,于是上网求救,基本上都在说废话,有些大侠竟然连WinForm和WebForm都分不清。

有人说把节点字体颜色设置成灰色,然后:

 代码如下 复制代码

        private void myTreeView1_BeforeCheck(object sender, TreeViewCancelEventArgs e)
        {
            if(e.Node.ForeColor==Color.Gray)
                e.Cancel
        }

这样基本上可以实现要求,但有两点问题,

1.想禁用的复选框还是处于非禁用状态,只是点击时没用,视觉感觉混淆。

2.双击时myTreeView1_BeforeCheck失效,即还是可以选中或取消选中CheckBox

到此为止网络查询解决方法彻底失败,我就很纳闷这真的很难么?怎么就没人说个正题呢?程序员都这样么?

于是我想到重写TreeView,我的思路是TreeView画节点时,如果e.Node.ForeColor==color.Gray时画一个禁用的ChceckBox覆盖到当前CheckBox上,http://www.111cn.net

好废话不多说,代码如下: 

   

 代码如下 复制代码

public partial class MyTreeView : TreeView
    {
        private Brush b = null;//节点字体颜色
        private Point p;//画CheckBox的位置
        public MyTreeView()
        {
            this.DrawMode = TreeViewDrawMode.OwnerDrawText;//自己画文本
        }
        protected override void OnDrawNode(DrawTreeNodeEventArgs e)
        {
            b = Brushes.Black;//默认字体为黑色
            if (e.Node.ForeColor == Color.Gray)
            {
                p = e.Bounds.Location;//获取节点的位置
                 p.X = p.X - 12;//覆盖到默认画CheckBox的位置
                  CheckBoxRenderer.DrawCheckBox(e.Graphics, p, CheckBoxState.CheckedDisabled);//画一个禁用的选中的CheckBox
                b = Brushes.Gray;//当前节点字体为灰色
            }
            if ((e.State & TreeNodeStates.Focused) != 0)
                b = Brushes.White;//点击某节点时节点字体颜色为白色
            e.Graphics.DrawString(e.Node.Text, this.Font, b, e.Bounds.Location);//画文本
        }
    }

 

CheckBoxState有很多种状态,CheckBoxState.MixedHot 三态对话框,如下图

时间: 2024-10-21 12:28:08

asp.net winform TreeView节点中的CheckBox 禁用实例的相关文章

c#-winform在datagrieview中对checkbox的使用问题。。

问题描述 winform在datagrieview中对checkbox的使用问题.. [winform中在datagrieview添加checkbox,最后遍历checkbox时,即使在前端全选但是也只能得到索引最大的一个值,怎么办?

Android中自定义Checkbox组件实例_Android

在Android中,Checkbox是一个很重要的UI组件,而且在Android中,它展现的形式越来越好看,这就说明有些系统,比如4.0以下,checkbox还是比较不好看,或者跟软件的风格不协调,就需要我们自定义这个组件. 自定义这个组件很简单,简单的增加修改xml文件即可. 准备工作 准备好两张图片,一个是选中的图片,另一个是未选中的图片.本文以checked.png和unchecked.png为例. 设置选择框 在drawable下新建文件custom_checkbox.xml 复制代码

Android中自定义Checkbox组件实例

在Android中,Checkbox是一个很重要的UI组件,而且在Android中,它展现的形式越来越好看,这就说明有些系统,比如4.0以下,checkbox还是比较不好看,或者跟软件的风格不协调,就需要我们自定义这个组件. 自定义这个组件很简单,简单的增加修改xml文件即可. 准备工作 准备好两张图片,一个是选中的图片,另一个是未选中的图片.本文以checked.png和unchecked.png为例. 设置选择框 在drawable下新建文件custom_checkbox.xml 复制代码

C#中Winform的Treeview节点“正在展开...”的效果

比较简单的做法,增加一个子节点提示.然后开线程请求真实的子节点,完毕后替换提示节点. 代码如下 view plaincopy to clipboardprint? 01.using System; 02.using System.Collections.Generic; 03.using System.ComponentModel; 04.using System.Data; 05.using System.Drawing; 06.using System.Text; 07.using Syst

【winform】怎么在form2里的textbox里对form1的treeview节点之进行修改?

问题描述 [winform]怎么在form2里的textbox里对form1的treeview节点之进行修改? form1里有个treeview,现在选中其节点弹出form2的textbox 现在希望在textbox里输入的信息能同步修改该节点内容.并存入数据库中 请问各位高手们这个改怎么弄? 能不能给段代码过来? 解决方案 可以使用自定义事件,也可以传递form对象,通过它去访问它的变量或方法 解决方案二: Form2增加一个属性, TreeNode Node{get;set;} Form1的

js获取Treeview选中的节点(C#选中CheckBox项)_实用技巧

方法网上有很多,试了一下都有瑕疵.最后找了个看上去代码比较少,比较顺眼的,测试结果报错说有几个函数不存在,于是设置断点调试,各个属性查找有用的字段,终于找到. 现整理如下: 首先,要想在javascript中获取treeview中带checkbox的节点,需要设置treeview节点的某些属性,我是在后台代码中添加的. 复制代码 代码如下: TreeNode newNode = new TreeNode(); newNode.Text = "showText"; newNode.Val

Winform 里面的TreeView节点定位的另外一种方法TreeNode.FromHandle

Winform 里面的TreeView是一种常见的.功能强大的控件,一般的使用大家可能都是比较熟悉的了,估计我们大多数做定位节点的时候,一般都是采用循环查找的方法.如下面的方法所示  foreach (TreeNode node in this.TreeView1.Nodes)   {      if (node.Text == "要找的节点名称")      {         return node;      }       return null;   } 另外还有一种方法是使

vs中如何在treeview节点后面添加按钮

问题描述 vs中如何在treeview节点后面添加按钮 解决方案

JS控件ASP.NET的treeview控件全选或者取消

 本篇文章主要是对JS控件ASP.NET的treeview控件全选或者取消的示例代码进行了介绍,需要的朋友可以过来参考下,希望对大家有所帮助 代码如下: <script language="javascript">    /*    函数名称:CheckNode(currentNode).ParentNode(currentNode).ChildNode(currentNode)      函数功能:实现带checkbox的treeview中    1.选中父结点其子结点也