我有一个上下文菜单,允许更改其正常使用的控件的背景颜色和前景颜色。
private void backgroundColorToolStripMenuItem_Click(object sender, EventArgs e)
{
if (colorDialog1.ShowDialog() == DialogResult.OK)
{
contextColorOptions.SourceControl.BackColor = colorDialog1.Color;
}
}
但是,我还有一个ColorPreferences类,用于在类级别使用colorPrefs的实例化名称保存这些颜色。
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 if语句并添加,删除或编辑这些控件名称几乎不可避免地会出错。
我已经看过msdn,堆栈溢出和其他代码论坛区域,但无济于事。 提前谢谢。
答案 0 :(得分:0)
我没有声明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;
...