将值赋给名为与另一个类的变量相同的类变量
问题描述:
我有一个上下文菜单,允许更改其正常工作的任何控件的背景颜色和前景颜色。将值赋给名为与另一个类的变量相同的类变量
private void backgroundColorToolStripMenuItem_Click(object sender, EventArgs e)
{
if (colorDialog1.ShowDialog() == DialogResult.OK)
{
contextColorOptions.SourceControl.BackColor = colorDialog1.Color;
}
}
不过,我也有一个用来保存这些颜色在类级别colorPrefs的实例名称ColorPreferences类。
public class ColorPreferences
{
public Color btnTestBack { get; set; }
public Color betnTestFore { get; set; }
}
我想可以右键单击为btnTest并使其在选择的颜色分配给变量ColorPreferences
像这样的事情
private void backgroundColorToolStripMenuItem_Click(object sender, EventArgs e)
{
if (colorDialog1.ShowDialog() == DialogResult.OK)
{
contextColorOptions.SourceControl.BackColor = colorDialog1.Color;
colorPrefs.(source control object)Back = colorDialog1.Color;
//the above line does not work and is a concept idea of what i want to achieve.
}
}
问:我怎样才能使用的源控制上下文菜单,使其指向ColorPreferences类中的相同变量。 例如,右键单击的对象是btnTest,可以说我使用了我的更改背景颜色方法。我希望将所选颜色保存到colorPrefs.btnTestBack。所以名称总是与添加Back或Fore到最后一样。
否则我有超过100个控件在项目中使用这个,做100如果语句和添加,删除或编辑这些控制名称将几乎不可避免地犯了一个错误。
我已经通过msdn,堆栈溢出和其他代码论坛区域,但无济于事。 在此先感谢。
答
不是声明ColorPreferences类的,我将宣布Colorpreferences与对照字典的关键
class ControlColors
{
Back: Color;
Fore: Color;
}
...
Dictionary<object, ControlColors> ColorPreferences = new Dictionary<object, ControlColors>();
,并在事件处理程序:
...
if (!ColorPreferences.Contains(sender)) ColorPreferences.Add(sender, new ControlColors());
ColorPreferences[sender].Back = colorDialog1.Color;
...
什么是你的问题?你是否想在一个操作中更改所有控件的颜色? –
你可以看看.NET的SystemColors类。最基本的方法是在ColorPreferences上创建静态特性以获得更高级的技术,您应该查看依赖注入。 – Wouter
根据你的问题的实际情况,让点击事件全部转到一个单独的处理程序,它实际上查看'object sender'变量是一个选项。是的,你可以在多个类中使用一个变量名。我会建议一个接口,其中该变量名称始终存在。 – zzxyz