65.9K
CodeProject 正在变化。 阅读更多。
Home

如何为 Font 属性设置 DefaultValue

starIconstarIcon
emptyStarIcon
starIcon
emptyStarIconemptyStarIcon

2.89/5 (18投票s)

2006年2月12日

MIT
viewsIcon

65247

如何设置字体属性的默认值。

引言

本文介绍了在Visual Studio .NET 2003中解决一个非常常见的问题! 您知道我们可以使用DefaultValue属性为某些属性设置默认值,例如下面的命令

[System.ComponentModel.DefaultValue(...)]

但是,如果您想以这种方式为Font属性设置默认值,您会看到非常异常的行为,并且它不起作用! 这是因为Font属性不是一个简单的属性。 我花了一些时间来解决这个问题,最终,我找到了解决方案...

场景:假设您想创建一个从Microsoft Button继承的按钮,并且您想将Font属性的默认值设置为Tahoma,大小为8磅。

解决方案:下面的示例将告诉您如何操作

public class Button : System.Windows.Forms.Button
{
    private static System.Drawing.Font _defaultFont =
        new System.Drawing.Font("Tahoma",
        8.25f, System.Drawing.FontStyle.Regular,
        System.Drawing.GraphicsUnit.Point,
        178,
        false);

        public override System.Drawing.Font Font
        {
            get
            {
                return(base.Font);
            }
            set
            {
                if(value == null)
                    base.Font = _defaultFont;
                else
                {
                    if(value == System.Windows.Forms.Control.DefaultFont)
                        base.Font = _defaultFont;
                    else
                        base.Font = value;
                }
            }
        }

        public override void ResetFont()
        {
            Font = null;
        }

        private bool ShouldSerializeFont()
        {
            return(!Font.Equals(_defaultFont));
        }

        public Button()
        {
            Font = _defaultFont;
        }
    }

如上面的代码所示,我没有为Font属性编写任何属性,而是使用了两个名为ResetFont()ShouldSerializeFont()的方法。 您应该知道,对于.NET中的每个属性,我们都有这两种方法

  • ResetSomeProperty()
  • ShouldSerializeSomeProperty()
© . All rights reserved.