`
mlzboy
  • 浏览: 725325 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

改进的CheckedListBox控件

阅读更多
这个话题似乎很早就有说了,
不过我也最近才经常接触的winform。记录之

我希望能够在CheckedListBox中实现如下的效果:

<!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--> 1 1        Category.CategorysDataTable dt;            dt = new Category.CategorysDataTable();
 2 2            dt.Constraints.Add(new UniqueConstraint(dt.IDColumn));
 3 3            dt.Constraints.Add(new UniqueConstraint(dt.TableNameColumn));
 4 4            Category.CategorysRow row = dt.NewCategorysRow();
 5 5            row.ID = 1;
 6 6            row.OrginialSequence = 1;
 7 7            row.TargetSequence = 1;
 8 8            row.TableName = "TB";
 9 9            row.Flag = true;
1010            dt.AddCategorysRow(row);
1111
1212            row = dt.NewCategorysRow();
1313            row.ID = 2;
1414            row.OrginialSequence = 1;
1515            row.TargetSequence = 1;
1616            row.TableName = "TB2";
1717            row.Flag = false;
1818            dt.AddCategorysRow(row);
19            this.chklstbxTables.Items.Clear();
20            this.chklstbxTables.DataSource = dt;
21            this.chklstbxTables.DisplayMember = "TableName";
22            this.chklstbxTables.ValueMember= "Flag";
通过它,可以将CheckedListBox的复选框绑定到一个数据库的boolean型的字段上,效果如下


下面是我改造的过程

首先查了一下msdn,
http://msdn2.microsoft.com/zh-cn/library/system.windows.forms.checkedlistbox_members(VS.80).aspx
会看到如下几个属性,
Public property DataSource 获取或设置控件的数据源。此属性与此类无关。
Public property DisplayMember 此属性与此类无关。
Public property ValueMember 获取或设置一个字符串,该字符串指定要从中取值的数据源的属性此属性与此类无关。
但是这三个属性是我们需要的,
使用Reflector查看了一CheckedListBox的关系
在CheckedListBox中本身已经实现了这三个属性,仅是ms使用了如下的特性,使我们不能用它了,[EditorBrowsable(EditorBrowsableState.Never), Browsable(false)]
知道了来龙去脉就好改造了,在原CheckedListBox基础上再扩展一个类ExCheckedListBox
  1using System;
  2using System.Collections.Generic;
  3using System.Text;
  4using System.ComponentModel;
  5using System.Drawing;
  6using System.Windows.Forms;
  7using System.Drawing.Design;
  8
  9namespace CustomControls
 10{
 11    /**//// <summary>
 12    /// (eraghi)
 13    /// Extended CheckedListBox with binding facilities (Value property)
 14    /// </summary>

 15    [ToolboxBitmap(typeof(CheckedListBox))]
 16    public class ExCheckedListBox : CheckedListBox
 17    {
 18        /**//// <summary>
 19        /// Default constructor
 20        /// </summary>

 21        public ExCheckedListBox()
 22        {
 23            this.CheckOnClick = true;
 24           
 25        }

 26
 27       
 28        
 29        /**//// <summary>
 30        ///    Gets or sets the property to display for this CustomControls.CheckedListBox.
 31        ///
 32        /// Returns:
 33        ///     A System.String specifying the name of an object property that is contained
 34        ///     in the collection specified by the CustomControls.CheckedListBox.DataSource
 35        ///     property. The default is an empty string ("").
 36        /// </summary>

 37        [DefaultValue("")]
 38        [TypeConverter("System.Windows.Forms.Design.DataMemberFieldConverter, System.Design, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a")]
 39        [Editor("System.Windows.Forms.Design.DataMemberFieldEditor, System.Design, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"typeof(UITypeEditor))]
 40        [Browsable(true)]
 41        public new string DisplayMember
 42        {
 43            get
 44            {
 45                return base.DisplayMember;
 46            }

 47            set
 48            {
 49                base.DisplayMember = value;
 50                
 51            }

 52        }

 53       
 54        /**//// <summary>
 55        /// Gets or sets the data source for this CustomControls.CheckedListBox.
 56        /// Returns:
 57        ///    An object that implements the System.Collections.IList or System.ComponentModel.IListSource
 58        ///    interfaces, such as a System.Data.DataSet or an System.Array. The default
 59        ///    is null.
 60        ///
 61        ///Exceptions:
 62        ///  System.ArgumentException:
 63        ///    The assigned value does not implement the System.Collections.IList or System.ComponentModel.IListSource
 64        ///    interfaces.
 65        /// </summary>

 66        [DefaultValue("")]
 67        [AttributeProvider(typeof(IListSource))]
 68        [RefreshProperties(RefreshProperties.All)]
 69        [Browsable(true)]
 70        public new object DataSource 
 71            get 
 72            {
 73                return base.DataSource;
 74            }

 75            set 
 76            {
 77                base.DataSource = value;
 78                
 79            }

 80        }

 81        private int value;
 82        [DefaultValue(""), TypeConverter("System.Windows.Forms.Design.DataMemberFieldConverter, System.Design, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"), Editor("System.Windows.Forms.Design.DataMemberFieldEditor, System.Design, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"typeof(UITypeEditor))]
 83        [Browsable(true)]
 84        public new string ValueMember
 85        {
 86              get
 87            {
 88                /**////Gets checked items in decimal mode from binary mode
 89
 90                try
 91                {
 92                    //each item in list has a number that is binary number in decimal mode
 93                    //this number represents that number
 94                    int poweredNumber = 1;
 95                    //loop in all items of list
 96                    for (int i = 0; i < this.Items.Count; i++)
 97                    {
 98                        //if item checked and the value doesn't contains poweredNumber then
 99                        //add poweredNumber to the value
100                        if ((this.GetItemChecked(i)))
101                            this.value |= poweredNumber;
102                        //else if poweredNumber exists in the value remove from it
103                        else if ((this.value & poweredNumber) != 0)
104                            this.value -= poweredNumber;
105
106                        //raise to the power
107                        poweredNumber *= 2;
108                    }

109                }

110                catch (ArgumentException ex)
111                {
112                    throw ex;
113                }

114                catch (Exception ex)
115                {
116                    throw ex;
117                }

118
119
120                return base.ValueMember;
121            }

122            set
123            {
124                base.ValueMember = value;
125                if (base.ValueMember.ToLower() == "false")
126                    this.value = 0;
127                else
128                    this.value </sp
分享到:
评论

相关推荐

    CheckedListBox控件的法

    "CheckedListBox控件的使用和相关知识点" CheckedListBox控件是Windows Forms应用程序中的一种常用控件,它允许用户从列表中选择多个项。下面是关于CheckedListBox控件的使用和相关知识点的总结。 一、添加项 在...

    listbox checkedlistbox 控件 移动元素

    在Windows应用程序开发中,`ListBox`和`CheckedListBox`控件是常见的用户界面元素,用于显示可选择的项目列表。这两个控件在多种场景中都有广泛的应用,例如数据浏览、选项选择等。本文将深入探讨如何在C#环境中实现...

    C# CheckedListBox控件的用法总结

    在C#编程中,CheckedListBox控件是一种常用的GUI组件,它允许用户在列表中选择一个或多个项目,每个项目前面有一个复选框供用户进行选择。这篇总结将详细介绍如何使用CheckedListBox控件及其相关方法。 1. **添加项...

    C# checkedListBox使用举例

    在C#编程中,CheckedListBox控件是一种常用的GUI元素,它允许用户在列表中选择一个或多个项目。本文将深入探讨CheckedListBox的使用方法,包括它的基本概念、属性、方法和事件,以及如何在实际应用中创建和操作...

    CheckedListBox例子(C#代码编写)

    在.NET框架中,CheckedListBox控件是Windows Forms应用程序中常用的一种控件,它结合了列表框(ListBox)和复选框的功能。用户可以选择一个或多个列表中的项目,并且每个项目旁边都有一个复选框来表示选择状态。这篇...

    CheckedListBox例子(C#源代码编写)

    在.NET Framework中,CheckedListBox控件是一个非常有用的UI元素,它结合了列表框(ListBox)的功能和复选框(CheckBox)的功能。用户可以选择一个或多个列表中的项,并且每个项都有一个可选的复选标记。这篇教程将深入...

    C#控件常见属性

    CheckedListBox控件的常见属性包括Items、SelectedIndex、SelectedItem等。 13. PictureBox控件 PictureBox控件用于显示图片信息。PictureBox控件的常见属性包括Image、SizeMode、BackColor等。 14. Timer控件 ...

    使用checkedListBox程序(C#代码编写)

    在.NET Framework中,CheckedListBox控件是Windows Forms应用程序中常用的一种控件,它允许用户通过复选框选择多个项。本篇文章将深入探讨如何在C#编程环境中利用CheckedListBox控件进行开发,以及相关的编程技巧。 ...

    C#010添加删除checkedListBox中的内容

    在C#编程中,CheckedListBox控件是一种常用的用户界面元素,它允许用户通过复选框来选择一个或多个项。本教程将详细讲解如何在C#中添加和删除CheckedListBox中的内容,这对于创建具有交互性功能的应用程序至关重要。...

    C#--winform--常用控件大全.doc

    12、CheckedListBox 控件 10 13、PictureBox 控件的使用 11 14、Timer 控件 11 15、ProgressBar控件和 TrackBar控件 12 16、HScrollBar 控件和 VScrollBar控件的使用 13 17、OpenFileDialog 控件 13 18、...

    Checkedlistbox与access使用

    在编程领域,尤其是在Windows Forms应用开发中,CheckedListbox控件常常被用来展示一系列可选的项目,同时允许用户进行多选操作。而Access数据库则是一个常用的轻量级数据库管理系统,用于存储和管理数据。当这两者...

    .net控件属性事件大全详解

    CheckedListBox 控件的常用属性包括 Items、CheckedItems、SelectionMode 等。CheckedListBox 控件的常用事件包括 ItemCheck、SelectedIndexChanged 等。 ### 13. PictureBox 控件 PictureBox 控件用于显示图片...

    CheckedListBox例子的应用程序,.net,很好的实例(C#源代码编写)

    CheckedListBox控件是.NET Framework中Windows Forms应用程序设计的一个重要组件,它结合了列表框(ListBox)和复选框(CheckBox)的功能,允许用户在列表项中进行多项选择。这个控件常用于需要用户提供多选选项的...

    使用checkedListBox程序,添加,删除,显示功能(C#源代码编写)

    在C#编程中,CheckedListBox控件是一种常用的GUI元素,它允许用户在列表中选择一个或多个项目。本文将深入探讨如何使用C#编写代码来实现CheckedListBox的添加、删除和显示功能,以及如何理解其背后的逻辑。 首先,...

    C#使用checkedListBox1控件链接数据库的方法示例

    主要介绍了C#使用checkedListBox1控件链接数据库的方法,结合具体实例形式分析了数据库的创建及checkedListBox1控件连接数据库的相关操作技巧,需要的朋友可以参考下

    c# checkedListBox及listBox的使用

    在.NET Framework中,`CheckedListBox`和`ListBox`是两种常用的控件,分别用于不同的数据展示和用户交互场景。在Windows Forms应用开发中,熟练掌握这两种控件的使用能够极大地提升用户界面的交互性和功能多样性。 ...

    checkedListBox.rar

    checkedListBox控件在各种应用场景中,如设置选项、多选列表等,都有着广泛的应用。 一、checkedListBox的基本属性 1. **Items**:这是checkedListBox的核心属性,存储了列表中的所有项目。你可以通过Add、Insert...

    不可用前台色不变checkedlistbox

    【标题】"不可用前台色不变checkedlistbox"所涉及的知识点主要是在Windows Forms应用程序中,如何自定义CheckedListBox控件的行为,特别是当控件被设置为不可用(Enabled属性设为False)时,保持其前景色不变,即...

Global site tag (gtag.js) - Google Analytics