zoukankan      html  css  js  c++  java
  • c# Winform PropertyGrid 实现下拉框 多选

     1 using PropertyGridHelpers.Controls;
     2 using System;
     3 using System.Collections.Generic;
     4 using System.ComponentModel;
     5 using System.Drawing.Design;
     6 using System.Windows.Forms;
     7 using System.Windows.Forms.Design;
     8 
     9 namespace PropertyGridHelpers.UIEditors
    10 {
    11 
    12     public class FlagEnumUIEditor : UITypeEditor
    13     {
    14         private CheckedListBoxEx check;
    15 
    16         public FlagEnumUIEditor()
    17         {
    18             check = new CheckedListBoxEx();
    19             check.BorderStyle = BorderStyle.None;
    20         }
    21 
    22         public override object EditValue(ITypeDescriptorContext context, IServiceProvider provider, object value)
    23         {
    24             if (context != null && context.Instance != null && provider != null)
    25             {
    26                 IWindowsFormsEditorService service = (IWindowsFormsEditorService)provider.GetService(typeof(IWindowsFormsEditorService));
    27                 if (service != null)
    28                 {
    29                     List<KeyValuePair<string, string>> list = new List<KeyValuePair<string, string>>();
    30                     for (int i = 0; i < 100; i++)
    31                     {
    32                         list.Add(new KeyValuePair<string, string>(i.ToString(), Guid.NewGuid().ToString("N")));
    33                     }
    34                     check.DataSource = list;
    35                     service.DropDownControl(check);
    36                     return check.GetSelectItemValueText;
    37                 }
    38             }
    39             return null;
    40         }
    41 
    42         public override UITypeEditorEditStyle GetEditStyle(ITypeDescriptorContext context)
    43         {
    44             return UITypeEditorEditStyle.DropDown;
    45         }
    46     }
    47 }
    FlagEnumUIEditor
      1 using System;
      2 using System.ComponentModel;
      3 using System.Windows.Forms;
      4 using System.Collections.Generic;
      5 using System.Linq;
      6 
      7 namespace PropertyGridHelpers.Controls
      8 {
      9 
     10     public class CheckedListBoxEx : CheckedListBox
     11     {
     12         private Container components = null;
     13         public CheckedListBoxEx()
     14         {
     15             InitializeComponent();
     16         }
     17         protected override void Dispose(bool disposing)
     18         {
     19             if (disposing)
     20             {
     21                 if (components != null)
     22                     components.Dispose();
     23             }
     24             base.Dispose(disposing);
     25         }
     26 
     27         #region Component Designer generated code
     28 
     29         private void InitializeComponent()
     30         {
     31             this.CheckOnClick = true;
     32         }
     33         protected override void OnItemCheck(ItemCheckEventArgs e)
     34         {
     35             base.OnItemCheck(e);
     36         }
     37         #endregion
     38 
     39         #region Add
     40         public CheckItem Add(string code, string value)
     41         {
     42             CheckItem item = new CheckItem(code, value);
     43             Items.Add(item);
     44             return item;
     45         }
     46         public CheckItem Add(CheckItem item)
     47         {
     48             Items.Add(item);
     49             return item;
     50         }
     51         #endregion
     52         #region 获取选择值
     53         public string GetSelectItemValueText { get { return string.Join(",", GetSelectItemAll.Select(n => n.Value)); } }
     54         public string GetSelectItemKeyText { get { return string.Join(",", GetSelectItemAll.Select(n => n.Key)); } }
     55         public List<KeyValuePair<string, string>> GetSelectItemAll
     56         {
     57             get
     58             {
     59                 List<KeyValuePair<string, string>> list = new List<KeyValuePair<string, string>>();
     60                 for (int i = 0; i < Items.Count; i++)
     61                 {
     62                     CheckItem item = Items[i] as CheckItem;
     63                     if (GetItemChecked(i))
     64                     {
     65                         list.Add(new KeyValuePair<string, string>(item.Code, item.Value));
     66                     }
     67                 }
     68                 return list;
     69             }
     70         }
     71         #endregion
     72         private object data;
     73         /// <summary>
     74         /// 绑定数据源
     75         /// </summary>
     76         /// <param name="data"></param>
     77         public new object DataSource
     78         {
     79             get
     80             {
     81                 return data;
     82             }
     83             set
     84             {
     85                 data = value;
     86                 if (data is IEnumerable<KeyValuePair<string, string>>)
     87                 {
     88                     foreach (KeyValuePair<string, string> item in (data as IEnumerable<KeyValuePair<string, string>>))
     89                     {
     90                         Add(item.Key, item.Value);
     91                     }
     92                 }
     93                 else if (data is IEnumerable<CheckItem>)
     94                 {
     95                     foreach (CheckItem item in (data as IEnumerable<CheckItem>))
     96                     {
     97                         Add(item);
     98                     }
     99                 }
    100             }
    101         }
    102 
    103     }
    104 }
    CheckedListBoxEx
     1 namespace PropertyGridHelpers.Controls
     2 {
     3     /// <summary>
     4     /// Represents an item in the checklistbox
     5     /// </summary>
     6     public class CheckItem
     7     {
     8         public string Value;
     9         public string Code;
    10         public CheckItem(string code, string value)
    11         {
    12             this.Value = value;
    13             this.Code = code;
    14         }
    15         public override string ToString()
    16         {
    17             return Value;
    18         }
    19     }
    20 
    21 }
    CheckItem
     1 using PropertyGridHelpers.UIEditors;
     2 using System.ComponentModel;
     3 using System.Windows.Forms;
     4 
     5 namespace WindowsFormsApplication1
     6 {
     7     public partial class Form1 : Form
     8     {
     9         public Form1()
    10         {
    11             InitializeComponent();
    12             propertyGrid1.SelectedObject = new PropertyList(); ;
    13         }
    14     }
    15     class PropertyList
    16     {
    17         string m_dir;
    18         [EditorAttribute(typeof(FlagEnumUIEditor), typeof(System.Drawing.Design.UITypeEditor))]
    19         [DisplayName("Direction")]
    20         [Description("Direction property")]
    21         public string Dir
    22         {
    23             get
    24             {
    25                 return m_dir;
    26             }
    27             set
    28             {
    29                 m_dir = value;
    30             }
    31         }
    32     }
    33  
    34 }
    Form1

    源码分享  

    链接:https://pan.baidu.com/s/1e8D-WoTYmA-D7vm88TTQrA
    提取码:bdrd
    复制这段内容后打开百度网盘手机App,操作更方便哦

  • 相关阅读:
    树的统计Count---树链剖分
    HDU 1069---背包---Monkey and Banana
    《程序员代码面试指南》第三章 二叉树问题 判断t1树是否包含t2树全部的拓扑结构
    《程序员代码面试指南》第三章 二叉树问题 二叉树按层打印和ZigZag打印
    《程序员代码面试指南》第三章 二叉树问题 找到二叉树中最大搜索二叉树
    《程序员代码面试指南》第三章 二叉树问题 在二叉树中找见累加和为指定值的最长路径
    《程序员代码面试指南》第三章 二叉树问题 遍历二叉树的神级方法 morris
    《程序员代码面试指南》第三章 二叉树问题 二叉树的序列化和反序列化
    《程序员代码面试指南》第三章 二叉树问题 较为直观的打印二叉树
    《程序员代码面试指南》第三章 二叉树问题 逆时针打印二叉树的边界
  • 原文地址:https://www.cnblogs.com/aaaaq/p/10802083.html
Copyright © 2011-2022 走看看