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.

71 lines
1.9 KiB
C#

using System.Diagnostics;
using System.Data;
using System.Collections;
using Microsoft.VisualBasic;
using System.Collections.Generic;
using System;
using System.ComponentModel;
using System.Drawing.Design;
using System.Windows.Forms;
namespace PropertyGridEx
{
public class UICustomEventEditor : System.Drawing.Design.UITypeEditor
{
public delegate object OnClick(object sender, EventArgs e);
protected UICustomEventEditor.OnClick m_MethodDelegate;
protected CustomProperty.CustomPropertyDescriptor m_sender;
public override UITypeEditorEditStyle GetEditStyle(ITypeDescriptorContext context)
{
if (context != null&& context.Instance != null)
{
if (! context.PropertyDescriptor.IsReadOnly)
{
return UITypeEditorEditStyle.Modal;
}
}
return UITypeEditorEditStyle.None;
}
[RefreshProperties(RefreshProperties.All)]public override object EditValue(ITypeDescriptorContext context, System.IServiceProvider provider, object value)
{
if (context == null || provider == null || context.Instance == null)
{
return base.EditValue(provider, value);
}
if (m_MethodDelegate == null)
{
DelegateAttribute attr = (DelegateAttribute) context.PropertyDescriptor.Attributes[typeof(DelegateAttribute)];
m_MethodDelegate = attr.GetMethod;
}
if (m_sender == null)
{
m_sender = context.PropertyDescriptor as CustomProperty.CustomPropertyDescriptor;
}
return m_MethodDelegate.Invoke(m_sender, null);
}
[AttributeUsage(AttributeTargets.Property)]public class DelegateAttribute : Attribute
{
protected UICustomEventEditor.OnClick m_MethodDelegate;
public UICustomEventEditor.OnClick GetMethod
{
get
{
return this.m_MethodDelegate;
}
}
public DelegateAttribute(UICustomEventEditor.OnClick MethodDelegate)
{
this.m_MethodDelegate = MethodDelegate;
}
}
}
}