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

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;}   }}
See also  Does It Make Sense to Splurge on a Laptop?

About Our Editorial Process

At DevX, we’re dedicated to tech entrepreneurship. Our team closely follows industry shifts, new products, AI breakthroughs, technology trends, and funding announcements. Articles undergo thorough editing to ensure accuracy and clarity, reflecting DevX’s style and supporting entrepreneurs in the tech sphere.

See our full editorial policy.

About Our Journalist