如何在C#中更改自定义控件中的特殊枚举值?

时间:2018-03-18 16:31:57

标签: c# oop controls

我创建了一个继承自Button类的自定义控件类。我这样做的原因是我需要创建相同的按钮,我不想每次都做所有事情。我想要一个下载列表,列出我在visual studio属性选项卡上添加的属性。例如,我想要三种不同的颜色而不是其他颜色,所以我想要一个新属性的下拉列表。我使用了一个enum,它有效,但问题是当我选择例如红色时,它不会改变颜色。代码是:

public class CustomButton : Button
{
    public NormalColor CLR { get; set; }

    public enum NormalColor
    {
        Red,
        Blue,
        Yellow
    }
    #region Constructor

    public CustomButton()
    {
        if (CLR == NormalColor.Blue)
        {
            BackColor = Color.Blue;
        }
        else if (CLR == NormalColor.Red)
        {
            BackColor = Color.Red;
        }
        else if (CLR == NormalColor.Yellow)
        {
            BackColor = Color.Yellow;
        }
        else
        {
            BackColor = Color.FromArgb(18, 18, 18);
        }
        ForeColor = Color.White;
        FlatAppearance.BorderSize = 0;
        FlatStyle = FlatStyle.Flat;
        Size = new Size(100, 100);
        MouseEnter += CustomButton_MouseEnter;
        MouseLeave += CustomButton_MouseLeave;
        MouseClick += CustomButton_MouseClick;
    }
    #endregion
}

2 个答案:

答案 0 :(得分:1)

在控件构造函数中,您可以定义其基本(默认)属性,而不是其行为或控件如何响应用户设置。

您的公共属性被委派给此任务。

  

请注意,我已插入InitializeComponent()程序,所以   可以从ToolBox中将控件放入容器中。

如果您想在设计时隐藏属性窗口中的对照BackColor属性,请覆盖该属性并将其隐藏:

[EditorBrowsable(EditorBrowsableState.Never), Browsable(false)]

您可以通过这种方式更改CustomButton
(使用当前设置,当您从“工具箱”中删除对窗体的控件时,将使用红色BackColor和白色ForeColor绘制。

public class CustomButton : Button
{
    private NormalColor CurrentColorSelection = 0;
    public NormalColor CLR
    {
        get { return CurrentColorSelection; }
        set { SetBackColor(value); }
    }

    public enum NormalColor
    {
        Red,
        Blue,
        Yellow
    }

    public CustomButton()
    {
        InitializeComponent();
    }

    private void InitializeComponent()
    {
        SetBackColor(CurrentColorSelection);
        this.ForeColor = Color.White;
        this.FlatAppearance.BorderSize = 0;
        this.FlatStyle = FlatStyle.Flat;
        this.Size = new Size(100, 100);
        this.MouseEnter += this.CustomButton_MouseEnter;
        this.MouseLeave += this.CustomButton_MouseLeave;
        this.MouseClick += this.CustomButton_MouseClick;
    }

    [EditorBrowsable(EditorBrowsableState.Never), Browsable(false)]
    public override Color BackColor
    {
        get { return base.BackColor; }
        set { base.BackColor = value; }
    }


    private void SetBackColor(NormalColor value)
    {
        this.CurrentColorSelection = value;
        this.BackColor = Color.FromName(value.ToString());
    }

   //(...)
   //Event Handlers
}

答案 1 :(得分:0)

当您实例化按钮类时,首先执行constructor类,因此在代码流中确保在实例化时设置了CLR

执行以下操作

public class CustomButton : Button
{
 public NormalColor CLR 
 { 
    get; 
    private set; 
 }

 public enum NormalColor
 {
    Red,
    Blue,
    Yellow
 }
#region Constructor

public CustomButton(NormalColor backgroundColor)
{
    CLR = backgroundColor;
    if (CLR == NormalColor.Blue)
    {
        BackColor = Color.Blue;
    }
   /*Your other code*/
 }
}