2017-08-10 148 views
-4

我有一个上下文菜单,允许更改其正常工作的任何控件的背景颜色和前景颜色。将值赋给名为与另一个类的变量相同的类变量

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

+0

什么是你的问题?你是否想在一个操作中更改所有控件的颜色? –

+0

你可以看看.NET的SystemColors类。最基本的方法是在ColorPreferences上创建静态特性以获得更高级的技术,您应该查看依赖注入。 – Wouter

+0

根据你的问题的实际情况,让点击事件全部转到一个单独的处理程序,它实际上查看'object sender'变量是一个选项。是的,你可以在多个类中使用一个变量名。我会建议一个接口,其中该变量名称始终存在。 – zzxyz

回答

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; 
... 
相关问题