即时编写一个大型C#应用程序。 关键是控件的颜色应该由应用程序的用户调整。 如果有任何解决方案要覆盖(仅适用于此应用程序的上下文)System.Drawing.SystemColors,那将是非常好的,这样我就不必手动设置每个控件的值。 有人知道我的问题的解决方案,这很简单吗? 感谢
答案 0 :(得分:1)
查看应用程序设置绑定。不确定如何为所有控件执行此操作,但只需通过控制树进行递归就足够了。
答案 1 :(得分:1)
我认为您最好的方法是继承每个控件并设置其默认显示属性。这将为您提供一个标准WinForms控件库,您可以轻松地自定义和重用它们。更多信息here(在VB中,我在C#中找不到示例)。
答案 2 :(得分:0)
您不需要覆盖系统默认值,但您可以定义自己的颜色。
Color NastyColour = Color.FromArgb(1, 2, 3);
1 =红色 2 =绿色 3 =蓝色
答案 3 :(得分:0)
不幸的是,仅为您的应用程序修改Windows配色方案是不可能的。
Winforms可以更改窗体上所有控件的背景颜色等内容,但对于许多区域(例如按钮上的斜角颜色或窗口标题栏),您可能需要求助于绘制控制自己。
答案 4 :(得分:0)
我写下面的代码来做这样的事情。我对它并不是特别满意,因为它需要专门处理任何不寻常的控件,但它完成了这项工作。我保留了一个Painter实例,并在每次创建表单时调用Apply,并将表单作为参数传递。它通过所有子控件进行递归,改变它们的外观
public class Painter
{
Color foreColor;
Color backColor;
Color altBackColor;
Color buttonColor;
Font font;
public Painter(Color foreColor, Color backColor, Color altBackColor, Color buttonColor, Font font)
{
this.foreColor=foreColor;
this.backColor=backColor;
this.altBackColor=altBackColor;
this.buttonColor=buttonColor;
this.font=font;
}
public void Apply(Control c)
{
if(c==null)
return;
c.ForeColor = foreColor;
c.BackColor = (c is Button ) ? buttonColor
: backColor;
if (c is DataGridView)
{
var dgv = (DataGridView) c;
dgv.BackgroundColor = BackColor;
dgv.AlternatingRowsDefaultCellStyle.BackColor = altBackColor;
dgv.ColumnHeadersDefaultCellStyle.BackColor = buttonColor;
}
c.Font = font;
foreach(Control child in c.Controls)
Apply(child);
}
}
答案 5 :(得分:-1)
支出1000美元并获得DevExpress的副本。我们正在使用他们的框架编写一个大型应用程序,并且剥皮能力很强。
我知道这听起来不是最好的答案,但如果您正在寻找适用于应用程序范围的应用程序,那么第三方库可能是合适的。