In Visual Studio, when you select an item on a form you're building, the Property Grid appears and lets you set various properties (e.g. background color, width, height, text color, etc.) from a two-column table. The left column contains the property name, and the right column contains either a text field where you enter a value, or a drop-down list from which you can select a value. You can use the Property Grid control in your own applications, but it's not quite so clear how you can determine which value a user selects from a drop-down list that contains multiple values. This example provides the code to know which item a user selects from the drop-down list.
First, inherit the class from UITypeEditor:
public class SelEditor :
System.Drawing.Design.UITypeEditor
{
// this is a container for strings, which can be
// picked-out
ListBox Box1 = new ListBox();
IWindowsFormsEditorService edSvc;
// this is a string array for drop-down list
public static string[] strList;
public SelEditor()
{
Box1.BorderStyle=BorderStyle.None;
// add event handler for drop-down box when item
// will be selected
Box1.Click+=new EventHandler(Box1_Click);
}
public override
System.Drawing.Design.UITypeEditorEditStyle.
GetEditStyle (System.ComponentModel.
ITypeDescriptorContext context)
{
return UITypeEditorEditStyle.DropDown;
}
// Displays the UI for value selection.
public override object EditValue
(System.ComponentModel.ITypeDescriptorContext
context, System.IServiceProvider provider,
object value)
{
Box1.Items.Clear();
Box1.Items.AddRange(strList);
Box1.Height=Box1.PreferredHeight;
// Uses the IWindowsFormsEditorService to
// display a drop-down UI in the Properties
// window.
edSvc =
(IWindowsFormsEditorService)provider.
GetService(typeof
(IWindowsFormsEditorService));
if( edSvc != null )
{
edSvc.DropDownControl( Box1 );
return Box1.SelectedItem;
}
return value;
}
private void Box1_Click(object sender, EventArgs e)
{
edSvc.CloseDropDown();
}
}
Second, describe a property in the class, to be displayed in the property grid:
public class Class1
{
// These are string arrays for different drop-down
// lists.
string[] Str1= {"AAA","BBB","CCC","DDDD"};
string[] Str2= {"WW","EEE"};
string s1,s2;
public Class1()
{
//
// TODO: Add constructor logic here
//
}
[EditorAttribute(typeof(SelEditor),
typeof(System.Drawing.Design.UITypeEditor))]
public string STR_1
{
get{SelEditor.strList=Str1; return s1;}
set{s1=value;}
}
[EditorAttribute(typeof(SelEditor),
typeof(System.Drawing.Design.UITypeEditor))]
public string STR_2
{
get{SelEditor.strList=Str2; return s2;}
set{s2=value;}
}
}