C# 在构造函数中存储按钮的字体

C# 在构造函数中存储按钮的字体,c#,visual-studio,C#,Visual Studio,我有一个来自System.Windows.Forms.button的自定义按钮: (class MyButton : Button) 此按钮有一个名为IsSelected的额外属性 public bool IsSelected { get { return _isSelected; } set { _isSelected = value;

我有一个来自System.Windows.Forms.button的自定义按钮:

(class MyButton : Button)
此按钮有一个名为IsSelected的额外属性

public bool IsSelected
    {
        get
        {
            return _isSelected;
        }
        set
        {
            _isSelected = value;

            if (value)
                this.Font = new Font(_storedFont.FontFamily, _storedFont.Size - 1); //Decrease font size by 1
            else
                this.Font = _storedFont; //Set font back to origin

        }
    }
如果IsSelected设置为true,则按钮的字体大小将减小1点,以向应用程序的用户显示此按钮处于“按下”状态。 如果IsSelected设置为false,则按钮的字体大小将设置回原始大小,以向用户显示此按钮现在再次处于“正常”状态

现在的问题是,我首先需要存储在VisualStudio属性窗口中设置的原始字体大小,然后再由IsSelected更改

public bool IsSelected
    {
        get
        {
            return _isSelected;
        }
        set
        {
            _isSelected = value;

            if (value)
                this.Font = new Font(_storedFont.FontFamily, _storedFont.Size - 1); //Decrease font size by 1
            else
                this.Font = _storedFont; //Set font back to origin

        }
    }
为了保存存储的原始字体大小,我有一个名为StoredFont的属性(类级别字段=_StoredFont)

然后,我尝试将原始字体大小存储在MyButton中的链接构造函数中,但似乎在Visual Studio实际设置属性窗口中定义的字体之前调用了该构造函数


问题1: 在VisualStudio实际设置字体之前调用构造函数是否正确

问题2: 在创建MyButton的新实例时,对如何保存从属性窗口设置的字体有何建议

注意 我已经考虑过许多其他显示选中状态的可能性(复选框代替按钮,其他背景色等),这不是我的问题


提前多谢

问题1:是,否则您将以NullReferenceException结束

问题2:假设第一个字体分配是您要存储的字体,您可以将该字体存储在字体替代中

    public override Font Font
    {
        get
        {
            return base.Font;
        }
        set
        {
            if(_storedFont == null)
                 _storedFont = Font;

            base.Font = value;
        }
    }

这样,您就不必担心初始化的顺序。

只是好奇而已。您是否使用自己的/自定义按钮格式类?我刚刚创建了一个从button派生的新类,然后添加了一些额外的属性。