[DisplayName("Logo Uzaklığı"), DescriptionAttribute1("SelfDestruct", ExtraInfo = "LogoXMax")]
[Editor(typeof(NumericUpDownEditor1),
typeof(System.Drawing.Design.UITypeEditor))]
public int LogoX { get; set; }
burada DescriptionAttribute1 ile NumericUpDown nesnesinin maximum değerini nereden alacağını gösteren ExtraInfo özelliği eklenmiştir.
[Editor(typeof(NumericUpDownEditor1),typeof(System.Drawing.Design.UITypeEditor))] ile de property editorun NumericUpDown nesnesi olarak görüntülenmesi sağlanmıştır.
public int LogoXMax
{
get
{
return theParent.Width;
}
set { }
}
NumericUpDown nesnesinin maximum değeri theParent ismindeki formun genişliğiyle eş zamanlı olarak değişiyor. bu şekilde aynı UITypeEditor farklı propertyler için de parametreler ayarlanarak kullanılabilir.
using System;
using System.ComponentModel;
using System.ComponentModel.Design;
using System.Drawing;
using System.Drawing.Design;
using System.Windows.Forms;
using System.Windows.Forms.Design;
using System.Reflection;
namespace WindowsFormsApplication1
{
[System.Security.Permissions.PermissionSet(System.Security.Permissions.SecurityAction.Demand, Name = "FullTrust")]
public class DescriptionAttribute1: UITypeEditor
{
public NumericUpDownEditor1()
{
}
public override UITypeEditorEditStyle GetEditStyle(ITypeDescriptorContext context)
{
return UITypeEditorEditStyle.DropDown;
}
public override object EditValue(
ITypeDescriptorContext context,
IServiceProvider provider,
object value)
{
IWindowsFormsEditorService edSvc =
(IWindowsFormsEditorService)provider.GetService(typeof(IWindowsFormsEditorService));
if (edSvc == null)
{
return null;
}
DescriptionAttribute1 attrParamName = new DescriptionAttribute1("null");
foreach (Attribute t in context.PropertyDescriptor.Attributes)
{
if (t.GetType().Name == "DescriptionAttribute1")
{
attrParamName = (DescriptionAttribute1)(t);
}
}
if (attrParamName.ExtraInfo == "")
{
throw new System.ArgumentException("Parameter cannot be null", "ExtraInfo");
return null;
}
int m2 = Convert.ToInt32(TypeDescriptor.GetProperties(context.Instance).Find(attrParamName.ExtraInfo, true).GetValue(context.Instance));
if (m2 < (int)value)
{
value = m2;
}
NumericUpDown nmr = new NumericUpDown();
nmr.Size = new Size(60, 120);
nmr.Minimum = 0;
nmr.Maximum = m2;
nmr.Increment = 1;
nmr.DecimalPlaces = 0;
nmr.Value = (int)value;
edSvc.DropDownControl(nmr);
return Convert.ToInt32(nmr.Value);
}
}
public class DescriptionAttribute1 : Attribute
{
private string description1;
public string Description1 { get { return description1; } }
private string extraInfo;
public string ExtraInfo { get { return extraInfo; } set { extraInfo = value; } }
public DescriptionAttribute1(string description1)
{
this.description1 = description1;
this.extraInfo = "";
}
}
}