How to Determine the Item Selected from a Property Grid Drop-down List

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;}   }}
Share the Post:
Share on facebook
Share on twitter
Share on linkedin

More From DevX