2017-08-10 18 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に保存します。だから、名前は常に最後に追加された「前後」と同じになります。

それ以外の場合、私は100個のif文を実行し、これらのコントロール名を追加、削除、編集することは、間違いを起こすことは避けられません。

私はmsdn、スタックオーバーフローおよびその他のコードフォーラムの領域を見ているが、役に立たない。 ありがとうございます。

+0

そして、あなたの質問は何ですか? 1回の操作ですべてのコントロールの色を変更しようとしていますか? –

+0

.net SystemColorsクラスを見ることができます。最も基本的なアプローチは、より高度なテクニックのためにColorPreferencesに静的なプロパティを作成して、依存性注入を調べることです。 – Wouter

+0

実際にあなたの質問に応じて、clickイベントをすべてシングラーハンドラに移動させると、実際には 'object sender'変数が表示されます。そして、はい、複数のクラスにわたって1つの変数名を使用できます。私はその変数名が常に存在するInterfaceを提案します。 – zzxyz

答えて

0

代わりColorPreferencesクラスを宣言する、私はキー

class ControlColors 
{ 
    Back: Color; 
    Fore: Color; 
} 

... 

Dictionary<object, ControlColors> ColorPreferences = new Dictionary<object, ControlColors>(); 

とあなたのイベントハンドラのようにコントロールして辞書としてColorpreferencesを宣言します:

... 
if (!ColorPreferences.Contains(sender)) ColorPreferences.Add(sender, new ControlColors()); 
ColorPreferences[sender].Back = colorDialog1.Color; 
...