Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/291.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何为我的表单及其创建的所有子表单设置默认字体,而不必触摸c#app的主代码?_C#_Winforms_Dynamic_Plugins_Fonts - Fatal编程技术网

如何为我的表单及其创建的所有子表单设置默认字体,而不必触摸c#app的主代码?

如何为我的表单及其创建的所有子表单设置默认字体,而不必触摸c#app的主代码?,c#,winforms,dynamic,plugins,fonts,C#,Winforms,Dynamic,Plugins,Fonts,我希望实现以下目标: 假设我们有一个用C#编写的基本程序,不管它做什么,它都有一些控件,显示一些自制的对话框,等等,并且有插件支持。您可以在运行时动态加载插件并再次卸载它们。 我如何编写一个插件,让你选择一种字体,然后将所选择的字体设置为加载插件的表单的默认字体,它的所有子控件(这很容易),以及字体更改后显示的所有对话框 我在谷歌上搜索了好几个小时,发现的大部分内容都是这样的: Form2 win = new Form2(); win.Font = this.Font; win.ShowDial

我希望实现以下目标: 假设我们有一个用C#编写的基本程序,不管它做什么,它都有一些控件,显示一些自制的对话框,等等,并且有插件支持。您可以在运行时动态加载插件并再次卸载它们。 我如何编写一个插件,让你选择一种字体,然后将所选择的字体设置为加载插件的表单的默认字体,它的所有子控件(这很容易),以及字体更改后显示的所有对话框

我在谷歌上搜索了好几个小时,发现的大部分内容都是这样的:

Form2 win = new Form2();
win.Font = this.Font;
win.ShowDialog(this);
当然,这意味着在显示窗口的任何地方触摸源代码并对其进行更改。一个插件显然不能在运行时重新编译一个程序,也不能在不丢失任何数据的情况下找到需要更改的所有代码行,或者执行上述所有操作并重新启动程序

目标是,对主程序知之甚少的人仍然可以编写一个插件,让他们为程序选择所需的字体。有人只知道如何编程插件以及如何加载/卸载插件

搜索的材料包括:


System.Drawing.Font可以用一个表示FontName的字符串进行实例化

 Label1.Font = new Font(Label1.Font.Name, currentSize, 
            Label1.Font.Style);

上面的代码更改单个控件的字体。但那不是我想要的。我在寻找一种方法,基本上,在不显式设置控件或子窗口的字体的情况下,更改创建控件或子窗口时使用的默认字体。如果我没有弄错的话,默认值是类似于Microsoft Sans Serif 8,25的。插件应该能够将默认字体更改为加载插件后选择的其他字体。winforms不支持在不“触摸代码”的情况下执行任何操作。您正在寻找WPF,它支持
样式
的概念,您可以将特定样式应用于特定UI元素或给定类型的所有UI元素,即使是以应用程序范围的方式。您确定吗?当表单及其控件从系统中检索默认字体时,是否有方法捕获它?