This sample demonstrates the technique for 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, 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();
}
}
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;}
}
}
No comments:
Post a Comment