将值赋给名为与另一个类的变量相同的类变量

时间:2017-08-10 21:11:57

标签: c# colors contextmenustrip

我有一个上下文菜单,允许更改其正常使用的控件的背景颜色和前景颜色。

    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,堆栈溢出和其他代码论坛区域,但无济于事。 提前谢谢。

1 个答案:

答案 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;
...