You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
197 lines
4.6 KiB
C#
197 lines
4.6 KiB
C#
namespace PropertyGridEx
|
|
{
|
|
using System;
|
|
using System.ComponentModel;
|
|
using System.Drawing.Design;
|
|
using System.Runtime.CompilerServices;
|
|
using System.Windows.Forms;
|
|
using System.Windows.Forms.Design;
|
|
|
|
public class UIListboxEditor : UITypeEditor
|
|
{
|
|
private bool bIsDropDownResizable = false;
|
|
private ListBox oList = new ListBox();
|
|
private object oSelectedValue = null;
|
|
private IWindowsFormsEditorService oEditorService;
|
|
|
|
public override UITypeEditorEditStyle GetEditStyle(ITypeDescriptorContext context)
|
|
{
|
|
if (context != null&& context.Instance != null)
|
|
{
|
|
UIListboxIsDropDownResizable attribute = (UIListboxIsDropDownResizable) context.PropertyDescriptor.Attributes[typeof(UIListboxIsDropDownResizable)];
|
|
if (attribute != null)
|
|
{
|
|
bIsDropDownResizable = true;
|
|
}
|
|
return UITypeEditorEditStyle.DropDown;
|
|
}
|
|
return UITypeEditorEditStyle.None;
|
|
}
|
|
|
|
public override bool IsDropDownResizable
|
|
{
|
|
get
|
|
{
|
|
return bIsDropDownResizable;
|
|
}
|
|
}
|
|
|
|
[RefreshProperties(RefreshProperties.All)]public override object EditValue(System.ComponentModel.ITypeDescriptorContext context, System.IServiceProvider provider, object value)
|
|
{
|
|
if (context == null || provider == null || context.Instance == null)
|
|
{
|
|
return base.EditValue(provider, value);
|
|
}
|
|
|
|
oEditorService = (System.Windows.Forms.Design.IWindowsFormsEditorService) provider.GetService(typeof(IWindowsFormsEditorService));
|
|
if (oEditorService != null)
|
|
{
|
|
|
|
// Get the Back reference to the Custom Property
|
|
CustomProperty.CustomPropertyDescriptor oDescriptor = (CustomProperty.CustomPropertyDescriptor) context.PropertyDescriptor;
|
|
CustomProperty cp = (CustomProperty) oDescriptor.CustomProperty;
|
|
|
|
// Declare attributes
|
|
UIListboxDatasource datasource;
|
|
UIListboxValueMember valuemember;
|
|
UIListboxDisplayMember displaymember;
|
|
|
|
// Get attributes
|
|
datasource = (UIListboxDatasource) context.PropertyDescriptor.Attributes[typeof(UIListboxDatasource)];
|
|
valuemember = (UIListboxValueMember) context.PropertyDescriptor.Attributes[typeof(UIListboxValueMember)];
|
|
displaymember = (UIListboxDisplayMember) context.PropertyDescriptor.Attributes[typeof(UIListboxDisplayMember)];
|
|
|
|
oList.BorderStyle = BorderStyle.None;
|
|
oList.IntegralHeight = true;
|
|
|
|
if (datasource != null)
|
|
{
|
|
oList.DataSource = datasource.Value;
|
|
}
|
|
|
|
if (displaymember != null)
|
|
{
|
|
oList.DisplayMember = displaymember.Value;
|
|
}
|
|
|
|
if (valuemember != null)
|
|
{
|
|
oList.ValueMember = valuemember.Value;
|
|
}
|
|
|
|
if (value != null)
|
|
{
|
|
if (value.GetType().Name == "String")
|
|
{
|
|
oList.Text = (string) value;
|
|
}
|
|
else
|
|
{
|
|
oList.SelectedItem = value;
|
|
}
|
|
}
|
|
|
|
|
|
oList.SelectedIndexChanged += new System.EventHandler(this.SelectedItem);
|
|
|
|
oEditorService.DropDownControl(oList);
|
|
if (oList.SelectedIndices.Count == 1)
|
|
{
|
|
cp.SelectedItem = oList.SelectedItem;
|
|
cp.SelectedValue = oSelectedValue;
|
|
value = oList.Text;
|
|
}
|
|
oEditorService.CloseDropDown();
|
|
}
|
|
else
|
|
{
|
|
return base.EditValue(provider, value);
|
|
}
|
|
|
|
return value;
|
|
|
|
}
|
|
|
|
private void SelectedItem(object sender, EventArgs e)
|
|
{
|
|
if (oEditorService != null)
|
|
{
|
|
if (oList.SelectedValue != null)
|
|
{
|
|
oSelectedValue = oList.SelectedValue;
|
|
}
|
|
oEditorService.CloseDropDown();
|
|
}
|
|
}
|
|
|
|
[AttributeUsage(AttributeTargets.Property)]
|
|
public class UIListboxDatasource : Attribute
|
|
{
|
|
|
|
private object oDataSource;
|
|
public UIListboxDatasource(ref object Datasource)
|
|
{
|
|
oDataSource = Datasource;
|
|
}
|
|
public object Value
|
|
{
|
|
get
|
|
{
|
|
return oDataSource;
|
|
}
|
|
}
|
|
}
|
|
|
|
[AttributeUsage(AttributeTargets.Property)]
|
|
public class UIListboxValueMember : Attribute
|
|
{
|
|
|
|
private string sValueMember;
|
|
public UIListboxValueMember(string ValueMember)
|
|
{
|
|
sValueMember = ValueMember;
|
|
}
|
|
public string Value
|
|
{
|
|
get
|
|
{
|
|
return sValueMember;
|
|
}
|
|
set
|
|
{
|
|
sValueMember = value;
|
|
}
|
|
}
|
|
}
|
|
|
|
[AttributeUsage(AttributeTargets.Property)]
|
|
public class UIListboxDisplayMember : Attribute
|
|
{
|
|
|
|
private string sDisplayMember;
|
|
public UIListboxDisplayMember(string DisplayMember)
|
|
{
|
|
sDisplayMember = DisplayMember;
|
|
}
|
|
public string Value
|
|
{
|
|
get
|
|
{
|
|
return sDisplayMember;
|
|
}
|
|
set
|
|
{
|
|
sDisplayMember = value;
|
|
}
|
|
}
|
|
|
|
}
|
|
|
|
[AttributeUsage(AttributeTargets.Property)]
|
|
public class UIListboxIsDropDownResizable : Attribute
|
|
{
|
|
|
|
}
|
|
}
|
|
}
|