2009-06-30 3 views
0

foreColor가 항상 진홍색이고 backColor가 항상 청록색 인 사용자 지정 단추를 만들려고합니다. 추악한 색체 배합이지만 각 컨트롤을 개별적으로 설정하지 않고 일관된 색 구성표로 많은 양의 컨트롤을 만들 수 있도록하기 위해 노력하고 있습니다. 내 폼에 사용자 지정 버튼을 놓으면 배경이 일반 버튼의 색상 및 텍스트는 진홍색이다,사용자 지정 Winforms 컨트롤 (특별히 단추)

public partial class CustomButton : Button 
{ 
    private static Color _defaultForeColor = Color.Crimson; 
    private static Color _defaultBackColor = Color.Cyan; 

    public CustomButton() 
    { 
     InitializeComponent(); 
     base.ForeColor = _defaultForeColor; 
     base.BackColor = _defaultBackColor; 
    } 


    public AutoScaleMode AutoScaleMode { get; set; } 

    [DefaultValue(typeof(Color), "Crimson")] 
    override public Color ForeColor 
    { 
     get { return base.ForeColor; } 
     set 
     { 
      base.ForeColor = _defaultForeColor; 
     } 
    } 

    [DefaultValue(typeof(Color), "Cyan")] 
    public override Color BackColor 
    { 
     get { return base.BackColor; } 
     set 
     { 
      base.BackColor = _defaultBackColor; 
     } 
    }   
} 

: 여기 버튼을 코딩 방법입니다. 앱을 실행하면 역시 마찬가지입니다. 이제 등록 정보 창에서 forecolor 또는 backcolor를 수정하려고하면 설정 한 기본값 (진홍색, 녹청)으로 돌아가서 내 앱을 실행할 때 해당 방식으로 표시됩니다. 컨트롤을 디자이너와 런타임에 올바르게 표시하려면 어떻게합니까?

답변

2

UseVisualStyleBackColor가 자동으로 true로 설정되고 재정의 할 수 없기 때문에 문제가 발생합니다. false로 변경하면 버튼이 올바르게 작동 함을 알 수 있습니다. 디자이너의

protected override void OnControlAdded(ControlEventArgs e) 
{ 
    base.OnControlAdded(e); 
    UseVisualStyleBackColor = false; 
} 

첫 번째 시간, 색상이 표시되지 않습니다,하지만 당신은 응용 프로그램을 실행할 때 제대로 작동합니다

하나의 옵션은 다음과 같이 버튼의 OnControlAdded을 무시하는 것입니다.

0

예를 들어 응용 프로그램 설정 (또는 컨트롤과 관련된 설정 클래스)에 앞뒤 색상을 바인딩하는 것이 좋습니다. 표준 단추와 디자이너에서 바인딩, 또는 자신의 자손을 사용하고 코드로 바인딩하십시오. 이 경우 일관된 색 구성표가 적용되며 더 중요한 것은 다시 컴파일하지 않고 변경할 수 있다는 것입니다.

public class CustomButton : Button 
{ 
    public CustomButton 
    { 
     InitializeComponent(); 
     if (!DesignMode) 
     { 
      DataBindings.Add(new Binding("ForeColor", Settings.Default, "ButtonForeColor", true, DataSourceUpdateMode.Never)); 
      DataBindings.Add(new Binding("BackColor", Settings.Default, "ButtonBackColor", true, DataSourceUpdateMode.Never)); 
     } 
    } 

    // ... 
관련 문제