6

私は「問題」に遭遇しました。それは非常に一般的であるに違いないと思い、誰かが助けてくれるかどうか疑問に思いました。

友人が職場で使用できるように、(VB.NETを使用して)単純なWindowsフォームを作成しています。彼の会社には、会社のロゴやWebサイトなどに使用する約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

ただし、定数が必要なため、それほど単純ではありません。インターネットを見て回ったところ、必要なものを実現する方法の例を見つけましたが、アプリケーション開発の非常に一般的な要件のように思われるため、非常に複雑に見えました。

この問題を解決する最良の方法は何だと思いますか?

どうもありがとう

4

5 に答える 5

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 を参照してください。

于 2009-06-21T10:23:18.640 に答える
3

ここで列挙が必要だとは言いません。「配色」について言及したとき、通常はポリモーフィズムを使用してさまざまな配色を許可します。

つまり、インターフェースは次のようになります。

   public interface IColorScheme
   {
        Color CompanyDarkBlue { get; }
        Color CompanyBlue { get; }
        Color CompanyLightBlue { get; }
   }

次に、好きな方法で実装します。

   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 プロパティを使用する必要があります。初期化中に、適切な配色を個別にインスタンス化する必要があります。

于 2009-06-21T10:33:40.257 に答える
2

これらの色を別のクラスに入れ、列挙ではなくプロパティとして入れます。

    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); }
    }
}
于 2009-06-21T10:28:10.720 に答える
0

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

ここで列挙が必要な理由がまったくわからない

于 2009-06-21T10:12:29.253 に答える