更改WinForm控件的字体

3
我有一个主表单。当我从我的应用程序菜单中点击Tools->Options时,我显示另一个表单(OptionsForm),其中包含更改控件使用的字体的选项。我将所选字体存储在Properties:Settings:Default:some_object中。我能够检索它并更新我的控件,但只能在我的MainForm上点击按钮时才能这样做。
我尝试通过实例化MainForm从OptionsForm调用在MainForm上编写的函数来更新control.Font -> 但不起作用。
如何确保每当我在Properties:Settings:Default:some_object中更改字体时,所有控件都反映出更改?
谢谢, Dev
2个回答

2
根据我的理解,您想在窗体加载时为窗体中的所有控件设置字体。
请尝试以下代码。
Form1 -
Form2 frm2 = new Form2();
frm2.ShowDialog(this);

在Form2中,当按钮被点击时:
Properties.Settings.Default.MyFont = this.Font;
            Properties.Settings.Default.Save();
            (from Control ctrl in this.Owner.Controls
             select ctrl).ToList().ForEach(ctrl => ctrl.Font = Properties.Settings.Default.MyFont);

这段代码会在表单中找到所有的控件并设置字体。


我想在 FormLoad 事件后更改字体。在同一个表单中,我可以在运行时更改它。但是,我无法从另一个表单中进行更改。 - Dev
我修改了答案,请现在尝试。 - Anuraj

2
  1. 在属性网格中找到并展开应受此设置影响的控件的“(ApplicationSettings)”属性。
  2. 单击“(PropertyBinding)”子属性旁边的“…”按钮。
  3. 在弹出窗口中,从字体属性的下拉框中选择“New”。
  4. 在“Name”字段中输入一个名称,如“UserFont”。
  5. 重复步骤1至4,以便每个应受字体影响的控件都有相同的设置,而不是在步骤3中选择“New”。
  6. 在选项对话框中,确保某些控件绑定到相同的设置,并在更改应用程序字体时更新该控件的字体。例如:
private void button1_Click(object sender, EventArgs e)
{
    if (DialogResult.OK == fontDialog1.ShowDialog(this))
    {
        button1.Font = fontDialog1.Font;
    }
}

这一行代码可以影响应用程序中每个控件的字体,因为它们都绑定到同一个应用程序设置。非常方便。

编辑: 或者您可以使用以下代码直接更新设置(而不是更新绑定到它的控件之一):

WindowsFormsApplication1.Properties.Settings.Default.UserFont = fontDialog1.Font;

我正在第二个窗体中显示FontDialog。我无法在第二个窗体中访问第一个窗体的控件。 - Dev
1
您不需要访问第一个表单--它会自动发生。这是第二个表单中的代码! - BlueMonkMN
1
@Dev 我刚刚发现/想起来,你不需要在每个控件上设置这个属性。如果你只是将表单的Font属性绑定到相同的ApplicationSetting值,它将影响该表单上的所有控件,如果它们没有覆盖字体。这种方法似乎也更好地处理了控件的定位。如果你选择一个大字体,它会自动重新定位控件。 - BlueMonkMN
顺便提一下,在创建此设置后,您可以通过在项目的“属性”文件夹下打开“Settings.settings”来查看所有应用程序设置列表中的设置。 - BlueMonkMN
刚刚注意到您也可以直接编辑设置,这在阅读代码时可能更清晰。我添加了一个编辑来演示如何操作。 - BlueMonkMN

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接