代码之家  ›  专栏  ›  技术社区  ›  DRapp

窗体上无法识别子类化的文本框只读字体

  •  0
  • DRapp  · 技术社区  · 17 年前

    正在为用户界面控件构建基类。我有命令按钮派生自定义字体分配和放在一个窗体上,一切都很好…但是,在同一表单上无法正确识别文本框只读属性字体的相同代码。它只采用了表单的设置,而忽略了自己的字体声明。

    public class MyTextbox : TextBox
    {
        [ReadOnly(true)]
        public override Font Font
        { get { return new 
                 Font( "Courier New", 12f, FontStyle.Regular, GraphicsUnit.Point ); 
              } 
        }
    }
    
    2 回复  |  直到 17 年前
        1
  •  1
  •   Hans Passant    17 年前

    字体属性是环境属性。如果从未分配,它将自动匹配容器控件的字体属性。你从未分配过它。

    这样做:

    public class MyTextbox : TextBox {
        Font mFont;
        public MyTextbox() {
            base.Font = mFont = new Font("Courier New", 12f, FontStyle.Regular, GraphicsUnit.Point);
        }
    
        [ReadOnly(true)]
        public override Font Font {
            get { return mFont; }
        }
    }
    
        2
  •  0
  •   DRapp    17 年前

    在“nobugz”(谢谢)的帮助下,我也发现了同样的失败。我的结果是…

    我的吸气剂

    get { return new Font( ... ); }
    

    但是,在NoBugz响应中,编译器的某些功能不太正常,因此在类的构造函数中

    clas MyTextbox...
    {
       public MyTextbox()
       {
          // it defaults itself from its own read-only font "new" object instance and works
          base.Font = Font;
       }
    }
    
    推荐文章