111,126
社区成员
发帖
与我相关
我的任务
分享
以TextBox为例
using System;
using System.Windows.Forms;
using System.Drawing.Design;
using System.ComponentModel;
using System.Globalization;
using System.Windows.Forms.Design;
public class TextBoxEx:TextBox
{
private All a= All.A;
private object b;
public All A
{
get
{
return a;
}
set
{
a=value;
switch(value)
{
case All.A:
b=Aenum.D;
break;
case All.B:
b=Benum.P;
break;
}
}
}
[System.ComponentModel.Editor(typeof(EnumEditer),typeof(UITypeEditor))]
public object B
{
get
{
return b;
}
set
{
b=value;
}
}
}
public class EnumEditer:UITypeEditor
{
ListBox dropdown ;
IWindowsFormsEditorService edSvc;
public override object EditValue(ITypeDescriptorContext context, IServiceProvider provider, object Value)
{
if (provider != null && Value !=null)
{
edSvc = (IWindowsFormsEditorService) provider.GetService(typeof(IWindowsFormsEditorService));
if ((edSvc ==null) || (context.Instance == null))
{
return Value;
}
if( dropdown ==null)
{
dropdown = new ListBox();
dropdown.BorderStyle = BorderStyle.None;
dropdown.MouseUp+= new System.Windows.Forms.MouseEventHandler(dropdown_MouseUp);
}
dropdown.Items.Clear();
Array values= System.Enum.GetValues(Value.GetType());
for(int i=0;i <values.Length;i++)
{
dropdown.Items.Add(values.GetValue(i));
}
edSvc.DropDownControl(this.dropdown);
Value = this.dropdown.SelectedItem;
return Value;
}
return Value;
}
public override UITypeEditorEditStyle GetEditStyle(ITypeDescriptorContext context)
{
return UITypeEditorEditStyle.DropDown;
}
private void dropdown_MouseUp(object sender , System.Windows.Forms.MouseEventArgs e)
{
if( edSvc != null && e.Button == MouseButtons.Left && this.dropdown.SelectedIndex > = 0)
{
edSvc.CloseDropDown();
}
}
}
public enum All
{
A,
B
}
public enum Aenum
{
K,
L,
D
}
public enum Benum
{
R,
Y,
P
}