2017-08-10 181 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; 
... 
相關問題