2009-06-21 6 views
6

私は、誰かが助けることができるかどうかよく分かっていると思う「問題」を見つけました。ウィンドウフォームアプリケーションで色の列挙を作成するにはどうすればよいですか?

私は、友人が職場で使うための簡単なWindowsフォーム(VB.NETを使用)を構築しています。彼の会社は会社のロゴ、ウェブサイトなどに使用する約10種類の特定のカラースキーム(RGB値のリストを持っています)を持っています。

私のアプリケーションでこのカラースキームに従いたいと思います。すべてのラベルのためのRBG値をハードコーディングを避けるために、これらの色の列挙を構築し、パネルなど私の最初の考えは次の操作を行うことだった

:しかし

Enum ColorTypes 
    CompanyDarkBlue = Color.FromArgB(0,56,147) 
    CompanyBlue = Color.FromArgB(0,111,198) 
    CompanyLightBlue = Color.FromArgB(0,145,201) 
End Enum 

を、それが一定であるように、その単純ではありません必須。私はインターネット上を見回し、私が必要とするものを達成する方法の例を見つけましたが、アプリケーション開発のための共通の要件のように思えるものは非常に複雑に思えました。

この問題を解決するにはどうすればよいと思いますか?

おかげでずっと

答えて

0

あなたは共有フィールド/プロパティを持つクラスで同じ情報を格納し、列挙と同じ効果を達することができます。

いけない列挙は、あなたが拡張メソッドを使用することができ、すべての

3

で、ここで必要とされる理由のポイントを参照してください。まず、あなたの列挙型を簡素化:

enum ColorType 
{ 
    CompanyDarkBlue, 
    CompanyBlue, 
    CompanyLightBlue 
} 

拡張メソッドは次のようなものになります。これは、あなたが書くことができるようになります

public static class ColorTypeExtensions 
{ 
    public static Color ToColor(this ColorType colorType) 
    { 
     switch(colorType) 
     { 
     case ColorType.CompanyDarkBlue: return Color.FromArgB(0,56,147); 
     ... 
     } 
    } 
} 

を:詳細については

ColorType.CompanyDarkBlue.ToColor(); 

C#: Enhance Enums using Extension Methodsを見てみましょう

2

これらの色を別のクラスに入れ、代わりにプロパティとして配置しますEnumerationよりも。

public class myColor 
{ 
    public static Color CompanyDarkBlue 
    { 
     get { return Color.FromArgb(0, 56, 147); } 
    } 

    public static Color CompanyBlue 
    { 
     get { return Color.FromArgb(0, 111, 198); } 
    } 

    public static Color CompanyLightBlue 
    { 
     get { return Color.FromArgb(0, 145, 201); } 
    } 
} 
+0

ワヒド - ありがとう。私はこれを使用し、evrythingはうまく働いた。お時間をいただきありがとうございます。 –

3

ここで列挙する必要はありません。あなたが "配色"に言及したとき、それを行うための通常の方法は多様性を使用して異なる配色を可能にすることです。

​​

、その後、あなたがそれを好きなようにそれを実装::私はまた、これらのプロパティは、仮想作った

public class MyColorScheme : IColorScheme 
    { 
     public virtual Color CompanyDarkBlue 
     { 
      get { return Color.FromArgB(0,56,147); } 
     } 

     public virtual Color CompanyBlue 
     { 
      get { return Color.FromArgB(0,56,147); } 
     } 

     // etc. 
    } 

注意、あなたはこのようなあなたのインタフェースを持っているでしょう意味

少し異なるスキームが必要な場合は、特定の色だけを簡単にオーバーライドすることができます。

この抽象化を最大限に活用するには、使用する実際の実装を意識することなく、プログラムでIColorSchemeプロパティをほとんど使用する必要があります。適切なカラースキームは、初期化中に別々にインスタンス化する必要があります。

+0

Groo - 答えてくれてありがとう。私はWahibのコードを使用しました(下記参照)。それが起こると、「インターフェイス」は私が読んでいる本の次の章であり、まだそれらに精通していません。一度私は彼らの周りに私の頭を得て、私は学習の練習としてあなたの提案を試してみます –

+0

良い、続ける!その点に達すると、私は練習をお勧めします:ユーザーの設定に基づいて全体のカラースキームを変更するアプリを作ってみて、インターフェイスがどのように役立つかを見てみましょう。 – Groo

関連する問題