1

PenProperties 클래스를 사용하여 사용자 지정 컨트롤을 만들려고합니다.사용자 지정 컨트롤 속성 알림

Properties

다른 모든 속성은 최대한 빨리이 DashOffSet 제외하고는 변경할로 문자열을 업데이트합니다. 내가 행운과 INotifyPropertyChanged 인터페이스를 사용하려고했습니다. 어떤 도움을 주셔서 감사합니다 감사합니다!

using System; 
using System.Collections.Generic; 
using System.ComponentModel; 
using System.Drawing; 
using System.Data; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks; 
using System.Windows.Forms; 

namespace CircuitSim 
{ 

[TypeConverter(typeof(PenPropertiesConverter))] 
public partial class Grid : UserControl 
{ 
    private PenProperties _PenProp = new PenProperties(); 
    public Grid() 
    { 
     InitializeComponent(); 
    } 
    public PenProperties Pen 
    { 
     get { return _PenProp; } 
     set 
     { 
      _PenProp = value; 
     } 
    } 
    } 
} 

using System; 
using System.ComponentModel; 
using System.Diagnostics; 
using System.Drawing; 
using System.Drawing.Drawing2D; 

namespace CircuitSim 
{ 

public class GridLinesProperties 
{ 
    private bool _Visible; 
    private int _Frequency; 
    public PenProperties _PenProp = new PenProperties(); 
    public GridLinesProperties() { } 

} 

[TypeConverterAttribute(typeof(PenPropertiesConverter))] 
public class PenProperties:INotifyPropertyChanged 
{ 
    #region private variables 
    private Color _Color; 
    private DashCap _DashCap; 
    private DashStyle _DashStyle; 
    private int _DashOffset; 
    private LineCap _EndCap; 
    private LineCap _StartCap; 

    #endregion 

    public PenProperties() 
    { 
     _Color = Color.Black; 
     _DashCap = DashCap.Flat; 
     _DashStyle = DashStyle.Solid; 
     _DashOffset = 0; 
     _EndCap = LineCap.Flat; 
     _StartCap = LineCap.Flat;   
    } 

    public PenProperties(Color color, DashCap dashCap, DashStyle dashstyle, int dashoffset,  
    LineCap endcap, LineCap startcap) 
    { 
     _Color = color; 
     _DashCap = dashCap; 
     _DashStyle = dashstyle; 
     _DashOffset = dashoffset; 
     _EndCap = endcap; 
     _StartCap = startcap;   
    } 
    #region Properties 

    public Color Color 
    { 
     get { return _Color; } 
     set 
     { 
      _Color = value;     
     } 
    } 
    public DashCap DashCap 
    { 
     get { return _DashCap; } 
     set 
     { 
      _DashCap = value;    
     } 
    } 

    public DashStyle DashStyle 
    { 
     get { return _DashStyle; } 
     set 
     { 
      _DashStyle = value; 
     } 
    } 

    public int DashOffset 
    { 
     get { return _DashOffset; } 
     set 
     { 
      if (this._DashOffset != value) 
      { 
       _DashOffset = value; 
       OnPropertyChanged("DashOffSet"); 
      } 
     } 
    } 

    public LineCap EndCap 
    { 
     get { return _EndCap; } 
     set 
     { 
      _EndCap = value; 
     } 
    } 
    public LineCap StartCap 
    { 
     get { return _StartCap; } 
     set 
     { 
      _StartCap = value; 
     } 
    } 

    #endregion 

    public event PropertyChangedEventHandler PropertyChanged; 

    protected void OnPropertyChanged(PropertyChangedEventArgs e) 
    { 
     PropertyChangedEventHandler handler = PropertyChanged; 
     if (handler != null) 
      handler(this, e); 
    } 

    protected void OnPropertyChanged(string propertyName) 
    { 
     OnPropertyChanged(new PropertyChangedEventArgs(propertyName)); 
    } 
} 

public class PenPropertiesConverter : TypeConverter 
{ 
    public PenPropertiesConverter() { } 
    public override bool GetPropertiesSupported(ITypeDescriptorContext context) 
    { 
     return true; 
    } 
    public override PropertyDescriptorCollection GetProperties(ITypeDescriptorContext context, 
    object value, System.Attribute[] attributes) 
    { 
     return TypeDescriptor.GetProperties(typeof(PenProperties)); 
    } 
    public override bool CanConvertFrom(ITypeDescriptorContext context, System.Type sourceType) 
    { 
     if (sourceType == typeof(string)) return true; 
     return base.CanConvertFrom(context, sourceType); 
    } 
    public override object ConvertTo(ITypeDescriptorContext context, 
    System.Globalization.CultureInfo culture, object value, System.Type destinationType) 
    { 
     if (destinationType == typeof(string) && value is PenProperties) 
     { 
      PenProperties _PenProp = (PenProperties)value; 
      System.ComponentModel.TypeConverter converter = 
    System.ComponentModel.TypeDescriptor.GetConverter(_PenProp.Color); 
      string _Color = converter.ConvertToString(_PenProp.Color); 
      return _Color + "," + _PenProp.DashCap + "," + _PenProp.DashStyle + "," + 
        _PenProp.DashOffset + "," + _PenProp.EndCap + "," + 
        _PenProp.StartCap;     
     } 
     return base.ConvertTo(context, culture, value, destinationType); 
    } 
    public override object ConvertFrom(ITypeDescriptorContext context, 
    System.Globalization.CultureInfo culture, object value) 
    { 
     if (value is string) 
     { 
      string[] v = ((string)value).Split(new char[]{','}); 
      return new PenProperties(Color.FromName(v[0]), 
            (DashCap)Enum.Parse(typeof(DashCap), v[1]), 
            (DashStyle)Enum.Parse(typeof(DashStyle),v[2]), 
            int.Parse(v[3]), (LineCap)Enum.Parse(typeof(LineCap), v[4]), 
            (LineCap)Enum.Parse(typeof(LineCap), v[5])); 
     } 

     return base.ConvertFrom(context, culture, value); 
    } 

} 

}

답변

1

귀하의 DashOffset 속성 케이스는 제기하는 OnPropertyChanged를 이벤트 다르다. OffSet의 's'는 OnPropertyChanged에 대문자로 표시되지만 속성 자체의 이름은 아닙니다.

+0

오타가 있습니다. 감사 – ManOfSteel

관련 문제