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

By submitting your information, you agree that devx.com may send you DevX offers via email, phone and text message, as well as email offers about other products and services that DevX believes may be of interest to you. DevX will process your information in accordance with the Quinstreet Privacy Policy.


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

WEBINAR:

On-Demand

Application Security Testing: An Integral Part of DevOps


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
Thanks for your registration, follow us on our social networks to keep up-to-date