C#程序在运行期间,如何动态改变界面的字体大小?目前需要做到两种方式的动态改变:第一种:程序在运行期间,用户通过选择程序菜单栏里的字体设置选项进行字体设置,可是在选择之后,该如何重绘整个界面(包括窗体的、菜单的、各个控件的)字体呢?通过什么事件触发?第二种:程序在运行期间,用户通过自己设置windows系统本身的字体大小(或更改大字体、超大字体或更改DPI的方式),那么程序又如何做到适应这种字体变化,自行改变界面字体的大小呢?在网上没有找到什么好的解决办法,期待大家的解答!

解决方案 »

  1.   

      public override Font Font
            {
                get
                {
                     return base.Font;
                }
                set
                {
                    foreach (Control  var in base.Controls )
                    {
                        SetControlFont(var , value);
                    }
             
                    base.Font = value;
                }
            }
            private void SetControlFont(Control    c, Font f)
            {
                c.Font = f;
                if (c.Controls.Count > 0)
                {
                    foreach (Control var in c.Controls)
                    {
                        SetControlFont(var, f);                }
                }
            }        private void button2_Click(object sender, EventArgs e)
            {
                this.Font = new Font("黑体", 20);
            }
      

  2.   

    第一种:直接设置this.Font为FontDialog.Font就能改变Form内部所有空间的字体
    第二种:设置windows的字体后 应用程序的字体不是自动改变了吗?
      

  3.   


    第一种解决办法,通过this.Font的确可以,非常感谢。
    但是第二种,设置windows的字体后,应用程序的字体不是自动改变的。比如你将DPI从96改为120(或者在【外观】中将字体大小改为【特大字体】),应用程序只是标题栏变大了,其他的都不变。
      

  4.   

    字体改变了把主窗体重新NEW一个出来,不就改变了
      

  5.   

    建议楼主,继承控件,然后加一个设置font的方法,读取font-size设置
    改变字体时
    this.Invalidate();第二个方法是系统自动的不用管
      

  6.   

    第二种好像windows form可以的!!
    就像一个放大镜一样!!可以把字体变大!!
    忘了叫什么了!!
      

  7.   


    不能简单new一下的,如果此时用户是在处理业务的时候,你new一下,当前正在处理的数据岂不是丢失了?
      

  8.   


    第二种情况,的确只是窗口标题变大而已...里面的控件什么的字体都没有改变啊。你可以试试,改变windows的DPI到120
      

  9.   

    针对第二种情况,我改变DPI之后重启操作系统,原来系统的所有字体大小都变了,还有界面布局也发生了变化了,不只是窗口标题变大而已。
    UserControl或者Form是不是有什么方式屏蔽DPI改变对系统界面造成的影响。