Set Two Items of a Property Grid from the Drop-down List

Set Two Items of a Property Grid from the Drop-down List

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;}		}	}


Share the Post: