Mercurial > pub > bltoolkit
comparison Demo/WinForms/Controls/EnumSelector.cs @ 0:f990fcb411a9
Копия текущей версии из github
author | cin |
---|---|
date | Thu, 27 Mar 2014 21:46:09 +0400 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
-1:000000000000 | 0:f990fcb411a9 |
---|---|
1 using System; | |
2 using System.Collections; | |
3 using System.ComponentModel; | |
4 using System.Windows.Forms; | |
5 using System.Drawing.Design; | |
6 | |
7 using BLToolkit.ComponentModel; | |
8 using System.Reflection; | |
9 | |
10 namespace BLToolkit.Demo.Controls | |
11 { | |
12 public partial class EnumSelector : GroupBox | |
13 { | |
14 public EnumSelector() | |
15 { | |
16 InitializeComponent(); | |
17 } | |
18 | |
19 public EnumSelector(IContainer container) | |
20 { | |
21 container.Add(this); | |
22 | |
23 InitializeComponent(); | |
24 } | |
25 | |
26 [RefreshProperties(RefreshProperties.Repaint)] | |
27 [Category("Data")] | |
28 [Bindable(true)] | |
29 public object Value | |
30 { | |
31 get | |
32 { | |
33 foreach (RadioButton r in _controls.Keys) | |
34 if (r.Checked) | |
35 return Enum.Parse(_valueType, (string)_controls[r]); | |
36 | |
37 | |
38 return -1; | |
39 } | |
40 set | |
41 { | |
42 if (value != null) | |
43 { | |
44 string s = value.ToString(); | |
45 | |
46 foreach (DictionaryEntry de in _controls) | |
47 { | |
48 RadioButton r = (RadioButton)de.Key; | |
49 | |
50 if (r.Checked != (de.Value.ToString() == s)) | |
51 r.Checked = !r.Checked; | |
52 } | |
53 } | |
54 } | |
55 } | |
56 | |
57 const FieldAttributes EnumField = FieldAttributes.Public | FieldAttributes.Static | FieldAttributes.Literal; | |
58 | |
59 private Hashtable _controls = new Hashtable(); | |
60 | |
61 private Type _valueType; | |
62 [RefreshProperties(RefreshProperties.Repaint)] | |
63 [DefaultValue(null)] | |
64 [Category("Data")] | |
65 [TypeConverter(typeof(TypeTypeConverter))] | |
66 [Editor(typeof(EnumEditor), typeof(UITypeEditor))] | |
67 public Type ValueType | |
68 { | |
69 get { return _valueType; } | |
70 set | |
71 { | |
72 _valueType = value; | |
73 | |
74 foreach (Control c in _controls.Keys) | |
75 Controls.Remove(c); | |
76 | |
77 FieldInfo[] fields = _valueType.GetFields(); | |
78 | |
79 foreach (FieldInfo fi in fields) | |
80 { | |
81 if ((fi.Attributes & EnumField) == EnumField) | |
82 { | |
83 RadioButton r = new RadioButton(); | |
84 | |
85 Controls.Add(r); | |
86 _controls.Add(r, fi.Name); | |
87 | |
88 r.Text = fi.Name; | |
89 r.Name = fi.Name + "RadioButton"; | |
90 r.TabIndex = _controls.Count; | |
91 r.AutoSize = true; | |
92 r.Location = new System.Drawing.Point(10, 23 * _controls.Count - 4); | |
93 r.UseVisualStyleBackColor = true; | |
94 } | |
95 } | |
96 } | |
97 } | |
98 | |
99 class EnumEditor : ComponentModel.Design.TypeEditor | |
100 { | |
101 protected override bool FilterTypeList(Type type) | |
102 { | |
103 return type.IsPublic && type.IsEnum; | |
104 } | |
105 } | |
106 } | |
107 } |