Login | Register   
Twitter
RSS Feed
Download our iPhone app
TODAY'S HEADLINES  |   ARTICLE ARCHIVE  |   FORUMS  |   TIP BANK
Browse DevX
Sign up for e-mail newsletters from DevX


Tip of the Day
Language: C#
Expertise: Intermediate
Nov 18, 2004

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;}
   }
}
Vladimir Shaposhnik
 
Comment and Contribute

 

 

 

 

 


(Maximum characters: 1200). You have 1200 characters left.

 

 

Sitemap