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;} }}