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

여기 필요한 이유 점을 참조하십시오. C#: Enhance Enums using Extension Methods을 살펴

ColorType.CompanyDarkBlue.ToColor(); 

자세한 내용은 :

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

이 당신이 쓸 수 있습니다 :

enum ColorType 
{ 
    CompanyDarkBlue, 
    CompanyBlue, 
    CompanyLightBlue 
} 

확장 방법은 다음과 같이 보일 것입니다 : 먼저 열거를 단순화

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 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 속성을 사용해야합니다. 적절한 색 구성표는 초기화하는 동안 별도로 인스턴스화해야합니다.

+0

Groo - 답변 해 주셔서 감사합니다. Wahib의 코드를 사용했습니다 (아래 참조). 그것이 일어날 때, '인터페이스'는 제가 읽고있는 책의 다음 장으로 아직 익숙하지 않습니다. 일단 나는 그들 주위에 머리를 얻을 학습 운동으로 귀하의 제안을 시도합니다 –

+0

좋아, 계속! 이 시점에 이르면 운동을 권장합니다. 사용자 설정을 기반으로 전체 색 구성표를 변경하는 앱을 만든 다음 인터페이스가 어떻게 도움이되는지 확인해보십시오. – Groo

관련 문제