[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 = ""; } } }