The MSDN-library does not contain a simple example demonstrating the picking-out item fromdrop-down list box for the property grid items. This sample demonstrates the techniquefor setting two items of a property grid from the drop-down list. These items have the type of string, but it must be simple to remake them for any other type.
Firstly, 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, objectvalue) { 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(); } }
Secondly, describe a property in the class, displayed in the property grid:
public class Class1 {//These are string arrays for different drop-down list. 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;} } }