C# – 跨表单使用ColorDialog

我有一个Windows窗体应用程序。 在主窗体上,用户将输入一些项目等,然后单击一个按钮,该按钮将打开一个新窗体(小窗体或大窗体,具体取决于复选框)。 现在,在我的主应用程序中,我有一个文件菜单 – 在其下设置 – 更改背景颜色。 这打开了colordialog。 如果用户没有选择任何内容,则背景颜色将保持默认。 但是,如果他们在主条目表单上更改它,我会更改几个文本框的背景 – 下面的代码。

private void warning1ToolStripMenuItem_Click(object sender, EventArgs e) { colorDialog1.ShowDialog(); Warn1Color = colorDialog1.Color.ToString(); if (Warn1Color != null) { tbWarn1Hrs.BackColor = colorDialog1.Color; tbWarn1Mins.BackColor = colorDialog1.Color; tbWarn1Secs.BackColor = colorDialog1.Color; tbWarn1Msg.BackColor = colorDialog1.Color; } } 

现在我的问题是我如何得到它然后更改打开的其他窗体中的背景。 我希望我可以在新表单构造函数中传递字符串,就像我使用其他一些值一样。

ie – 这是我在新表单中的代码….(注意 – 字符串Warn1Color在构造函数中传递,然后使= =字符串_Warn1Color。如果它为null,则背景将默认为黄色,但它无法将类型字符串转换为system.drawing.color。有没有人看到一个简单的解决方案,或者我可以做些什么来轻松地工作。

 if (_Warn1Color == null) { this.BackColor = System.Drawing.Color.Yellow; } else this.BackColor = _Warn1Color; 

您应该创建一个静态类来存储配置数据,例如此颜色样式。 然后,一旦提示用户进行更改,您就可以设置此值,还可以在需要使用时从任何其他表单调用Color值。

你的静态类应该看起来像这样……

 public static class StyleSettings{ private static Color _warn1Color = Color.FromArgb(255, 0, 0);//default colour public static Color Warn1Color { get { return _warn1Color; } set { _warn1Color = value; } } } 

然后你可以在你的示例方法中使用它,如…

 private void warning1ToolStripMenuItem_Click(object sender, EventArgs e) { if (colorDialog1.ShowDialog() == DialogResult.OK) { StyleSettings.Warn1Color = colorDialog1.Color; tbWarn1Hrs.BackColor = StyleSettings.Warn1Color; tbWarn1Mins.BackColor = StyleSettings.Warn1Color; tbWarn1Secs.BackColor = StyleSettings.Warn1Color; tbWarn1Msg.BackColor = StyleSettings.Warn1Color; } } 

通过构造函数传递颜色而不是字符串。 如果这可能不是出于任何原因,您可以创建一个包含所需颜色的ColorConfigClass,您可以在使用时进行设置。

我假设您使用了一个字符串,因为您希望能够传递null,而作为结构的System.Drawing.Color不能为null。

在这种情况下使用Nullable( http://msdn.microsoft.com/en-us/library/b3h38hb0%28v=vs.80%29.aspx )可以为null或者您可以将其他值视为“默认” ,说alpha = 0。

要在构造函数中传递一个值,只需转到表单的代码文件(您为事件编写代码的代码)并找到构造函数(与表单具有相同的名称),例如:

 namespace MyApp { public partial class MyForm : Form { public MyForm() { InitializeComponent(); } ... 

并为其添加参数:

 namespace MyApp { public partial class MyForm : Form { public MyForm(System.drawing.color background) { InitializeComponent(); ...do whatever you want with background... } ... 

当然,您还需要编辑您创建此表单的位置,例如更改

 form = new MyForm(); form.Show(); 

 form = new MyForm(backgroundColour); form.Show();