更改所有 Windows 窗体窗体上的设置

Posted

技术标签:

【中文标题】更改所有 Windows 窗体窗体上的设置【英文标题】:Change settings on all Windows Forms forms 【发布时间】:2013-10-20 16:05:07 【问题描述】:

我已更改我的app.config 文件以允许用户更改程序的配色方案。我可以弄清楚如何更改他们更改这些设置的表单的背景颜色:

Color colBackColor = Properties.Settings.Default.basicBackground;
this.BackColor = colBackColor;

但是如何更改所有表单的背景颜色?就像我仍然想将所有表单传递给函数一样。我已经问过这个问题,有人告诉我使用app.config 文件。既然我已经这样做了,我是不是用错了?

【问题讨论】:

将该代码放入所有表单中?有国王国王建议的基本形式。使用接口,在实例化其他表单时从“主”表单中传递颜色,使用 Forms 集合。 【参考方案1】:

只是您需要一个基础表单,您项目中的所有表单都必须从该基础表单继承:

public class FormBase : Form 
   protected override void OnLoad(EventArgs e)
    Color colBackColor = Properties.Settings.Default.basicBackground;
    BackColor = colBackColor;
   

//Then all other forms have to inherit from that FormBase instead of the standard Form
public class Form1 : FormBase 
  //...

public class Form2 : FormBase 
  //...

更新

public interface INotifyChangeStyle 
   void ChangeStyle();
    
public class FormBase : Form, INotifyChangeStyle 
   protected override void OnLoad(EventArgs e)
      ChangeStyle();
   
   public void ChangeStyle()
      //Perform style changing here
      Color colBackColor = Properties.Settings.Default.basicBackground;
      BackColor = colBackColor;
      //--------
      foreach(var c in Controls.OfType<INotifyChangeStyle>())
         c.ChangeStyle();
      
   

public class MyButton : Button, INotifyChangeStyle 
   public void ChangeStyle()
      //Perform style changing here
      //....
      //--------
      foreach(var c in Controls.OfType<INotifyChangeStyle>())
         c.ChangeStyle();
      
   

//...   the same for other control classes

【讨论】:

好的,如果我的基本表单上有一个组合框或按钮和其他东西并更改颜色,这是否意味着我在其他表单上的所有按钮和组合框都必须继承这些按钮和盒子?我想改变很多东西,背景色只是一个例子 @user2070677 这种情况相当复杂,我想你可能需要定义一些interface,你在项目中使用的所有控件都应该实现,那么你必须确定什么时候我们需要执行主题更改,在表单上触发,它将传播到所有子控件。 这让我明白了很多。它不完全在那里,因为在我运行程序时调用函数 onload 会自动更改背景。我希望他们能够在程序中选择配色方案并在那时进行更改。但非常感谢。这有帮助。我之前没有使用过接口(newb)所以这是一个很好的教训

以上是关于更改所有 Windows 窗体窗体上的设置的主要内容,如果未能解决你的问题,请参考以下文章

初始Windows程序

如何更改 Windows 窗体中标题栏中的文本?

公用文件夹上的 Windows 窗体 app.config

c# windows 窗体 如何 设置菜单的权限

更改Tomcat命令行窗体标题

运行 Aero 时如何确定实际窗口窗体大小(包含所有非客户端元素)?