C# 如何为Windows窗体颜色属性设置可变颜色

C# 如何为Windows窗体颜色属性设置可变颜色,c#,winforms,C#,Winforms,我是一个初学者,我认为解决方案非常简单,但我在互联网上找不到 我正在寻找一种将窗体和控件的背景色设置为某个颜色变量的方法,因此,例如,如果我将其值更改为绿色,则背景色设置为mainColor的每个控件都将变为绿色,并且更改将显示在设计器中 public class MainForm:Form { public static Color mainColor=[some color]; public static Color secColor=[some color]; pu

我是一个初学者,我认为解决方案非常简单,但我在互联网上找不到

我正在寻找一种将窗体和控件的背景色设置为某个颜色变量的方法,因此,例如,如果我将其值更改为绿色,则背景色设置为mainColor的每个控件都将变为绿色,并且更改将显示在设计器中

public class MainForm:Form
{
    public static Color mainColor=[some color];
    public static Color secColor=[some color];
    public Main()
    {
        InitializeComponent();
        BackColor=mainColor;
        control1.BackColor=secColor;
        control2.BackColor=secColor;
        control3.BackColor=secColor;
    }
}
通过改变mainColor和secColor。控件已更改,但它不会显示在设计器中。正确的方法是什么?

使用该类

以下是可用颜色的托盘:

如果要创建新颜色,请使用


查看有关新颜色的更多信息。

是的,这称为数据绑定,部分由设计器完成,部分由代码完成

而不是宣布

public static Color mainColor=[some color];
将其声明为财产:

    public Color MyColor
    {
        get
        {
            return myColor;
        }
        set
        {
            myColor = value;
        }
    }
在主窗体中,编辑要受此变量影响的每个控件,以将其颜色属性绑定到它。我将使用面板作为示例控件,因此将一些面板对象添加到窗体中。然后在每个面板对象的“属性”面板中,单击数据绑定旁边的+键,然后单击(高级)旁边的空框。单击省略号(…)并选择背景色属性。然后,在绑定下拉列表下,选择添加项目数据源。在下一个对话框中选择对象,导航到表单,然后选择该对象。属性列表将出现在格式化和高级绑定对话框中,您可以选择您的属性MyColor

请注意,一旦为第一个面板创建了此数据源,就不需要为每个面板重新创建它-只需引用已创建的数据源即可

然后,您可以通过更改程序中MyColor属性的值来更改执行此数据绑定的任何控件的背景色。他们将一起改变

您可能还需要安排该属性来广播它已更改的消息,因此将这一行添加到set()方法中

因此set方法如下所示

set
{
    myColor = value;
    form1BindingSource.ResetBindings(false);
}

它告诉绑定源对象通知所有订阅者更新自己,并且每次更改MyColor属性时都会自动进行更新。

我的问题不是如何为变量赋值,而是如何通过代码设置属性值,并且更改将显示在设计器中,或者通过其他方式设置控件的可变颜色。基本上,我想在我的应用程序中改变颜色的可能性,而不必单独改变每个控件。您无法在设计器中查看更改,因为此代码将仅在运行时执行。因此,您应该从设计器本身定义主颜色。单击一个控件,然后单击属性。但是通过属性,我不能只设置恒定的颜色。有没有办法将其设置为可变颜色?了解设计师的工作原理非常重要。它在设计时创建基类的实例。如果在“属性”窗口中更改该基类的属性,则可以看到该属性。但是您的构造函数不会在设计时运行。这是行不通的,你必须先编译你的项目,这是一个鸡和蛋的问题。一个用户控件可以做到这一点。现在我已经试过了,但它不起作用。我完全按照你写的做了,但是颜色没有改变。还需要另一个步骤吗?在BackColor属性中,一个小符号表示它已绑定到my forms绑定源中的MyColor,但属性不会同步。您是否也在刷新窗体或面板或显示颜色的任何对象?
form1BindingSource.ResetBindings(false);
set
{
    myColor = value;
    form1BindingSource.ResetBindings(false);
}