关于winform窗体继承问题.

.Net技术 码拜 10年前 (2015-05-10) 2706次浏览 0个评论
 

我们在做CS开发的时候 新建的窗体 都是宋体..有边框以及最大化最小化之类的东西..每次改的话 很费劲,,

所以 我写了一个cs继承form重新里面的部分内容..这样以后在新建窗体直接继承这个cs就不用改了.

public class BaseForm : Form
    {
        public BaseForm()
        {
        }
        protected override void OnCreateControl()
        {
            this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None;
            this.ShowIcon = false;
            this.MaximizeBox = false;
            this.MinimizeBox = false;
            this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen;
            this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle;
            this.ControlBox = false;
            base.OnCreateControl();
        }
        public override System.Drawing.Font Font
        {
            get
            {
                return new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
            }
            set
            {
                base.Font = value;
            }
        }

    }

因为我不知道用哪个事件..所以随意找了一个OnCreateControl.发现还可以,能控制新窗体里面的部分东西..于是我就用了

至于字体 这样也可以 或者this.font=new System.Drawing.Font也是可以..

那么问题来了..

新建一个form:baseform 你发现 你拖一些控件的字体 都是雅黑的…这听起来很正常.看起来也很正常.

不过文本框这地方就不一样了..输入的字体还是宋体的..但是我从属性来看 他的确是雅黑(因为继承了baseForm)

我调试输出
Console.WriteLine(textBox2.Font);
示的也是
[Font: Name=微软雅黑, Size=9, Units=3, GdiCharSet=134, GdiVerticalFont=False]
也正常,不过看起来一定不是雅黑 就是宋体..

这个时候 我在拖一个textbox..我在后台强制下

textBox2.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));

这样输入就变得正常了.是雅黑的效果..但是第一个文本框虽然集成了baseForm但是还是宋体

这个时候 我又输出

Console.WriteLine(textBox1.Font);
Console.WriteLine(textBox2.Font);

居然得到的是一样的东西

[Font: Name=微软雅黑, Size=9, Units=3, GdiCharSet=134, GdiVerticalFont=False]
[Font: Name=微软雅黑, Size=9, Units=3, GdiCharSet=134, GdiVerticalFont=False]

这就奇怪了…所以一般来说 只要把form的字体设置成雅黑,窗体里面的控件不都变成雅黑的吗?

如果这个答案是肯定的.那么上面的例子表明textbox不是其中.

如果是否定的.那么除了textbox其他还都是雅黑..

override System.Drawing.Font Font
应该是这里出了问题吧
50分
为什么不在设计器里指定属性,而非要写override?
61分
你的 构造函数中的 InitializeComponent();  方法 哪里去了??
引用 4 楼 duanzi_peng 的回复:

你的 构造函数中的 InitializeComponent();  方法 哪里去了??

把设计什么属性之类的,全都放在  构造函数里,试试。

override 之后窗体所有的控件的字体 都显示是微软雅黑..证明这个override 是成功的.

当窗体运行之后 你看到的所有的字体 也都是雅黑的..

就是文本框这特立….懂了么?

引用 3 楼 Z65443344 的回复:

..

引用 4 楼 duanzi_peng 的回复:

你的 构造函数中的 InitializeComponent();  方法 哪里去了??

每个窗体的InitializeComponent()我都不需要修改…默认的就行(宋体)

但是我会继承一个BaseForm 这个BaseForm里面改字体的…

现在采用这样的办法可以了.

     public class BaseForm : System.Windows.Forms.Form
    {
        public BaseForm()
        {
            this.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
            this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None;
            this.ShowIcon = false;
            this.MaximizeBox = false;
            this.MinimizeBox = false;
            this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen;
            this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle;
            this.ControlBox = false;
        }
    }

不过 针对字体除了文本框不可以 其他的属性都可以…搞定了就行,具体为啥我也不去关心了..


CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明关于winform窗体继承问题.
喜欢 (0)
[1034331897@qq.com]
分享 (0)

文章评论已关闭!