2009-06-21 15 views
6

Bir 'problem' ile karşılaştım ve bence oldukça yaygın olmalı ve herhangi birinin yardım edip edemeyeceğini merak ediyorum.Pencere formları uygulamasında renkler için bir numaralandırma nasıl oluşturabilirim?

Bir arkadaşımın iş yerinde kullanması için basit bir Windows formu (VB.NET kullanarak) yapıyorum. Şirketinin şirket logosu, web sitesi vb. Için kullandığı 10 özel renk şeması (RGB değerlerinin listesi var) var.

Uygulamamdaki bu renk şemasını takip etmek istiyorum ve gelişmeyi kolaylaştırmak istiyorum. her etiket için RBG değerini kodlama sert önlemek için bu renklerin bir numaralandırma kurmak, panel vb Benim ilk düşünce aşağıdakileri yapmak için oldu

: Ancak

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

, bir sabittir olarak o kadar basit değil gereklidir. İnternete baktım ve ihtiyacım olanı nasıl elde edeceğime dair bir örnek buldum, ancak uygulama geliştirme için oldukça yaygın bir gereksinim gibi görünen şey için karmaşık bir şekilde karmaşık görünüyordu.

Bu problemi çözmenin en iyi yolu nedir?

Çok teşekkürler

cevap

0

paylaşılan alanlar/özelliklere sahip bir sınıfta aynı bilgi depolamak ve bir numaralandırma ile aynı etkiyi ulaşabilir.

Dont bir numaralandırma Bir uzatma yöntemi kullanabilirsiniz tüm

3

burada neden gerekli olduğu noktaya bakın. C#: Enhance Enums using Extension Methods bakmak

ColorType.CompanyDarkBlue.ToColor(); 

Daha fazla bilgi için:

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

Bu yazmayı sağlayacaktır:

enum ColorType 
{ 
    CompanyDarkBlue, 
    CompanyBlue, 
    CompanyLightBlue 
} 

uzatma yöntemi bu gibi bir şey olacaktır: Önce enum basitleştirmek

2

Bu renkleri ayrı bir sınıfa koyun ve onları özellik olarak koyun. Numaralandırmadan

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

Wahid - Teşekkürler. Bunu kullandım ve işe yaradım. Yardım etmeye zaman ayırdığınız için teşekkürler. –

3

Burada bir numaralandırma gerektiğini söylemezdim. "Renk şemasını" belirttiğinizde, bunu yapmak için normal yol, farklı renk şemalarına izin vermek için polimorfizm kullanmaktır. Eğer böyle senin arayüzü gerekeceği anlamına geliyor

:

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

ve sonra herhangi bir şekilde uygulamak Hoşuna: Ben de bu özellikler sanal yaptık

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. 
    } 

Not yüzden biraz farklı bir şemaya ihtiyacınız varsa, sadece belirli renkleri geçersiz kılabilirsiniz.

Bu soyutlamadan en iyi şekilde yararlanmak için, programınız çoğunlukla kullanılan gerçek uygulamanın farkında olmadan IColorScheme özelliklerini kullanmalıdır. Uygun renk şeması, başlatma sırasında ayrı olarak başlatılmalıdır.

+0

Groo - Cevabınız için teşekkürler. Kodu Wahib'den kullandım (aşağıya bakınız). Olduğu gibi, 'Arayüzler' okuduğum kitapta bir sonraki bölümüm ve henüz bunlara aşina değilim. Bir kez kafamı çevrelediğimde öneriyi bir öğrenme alıştırması olarak deneyeceğim. –

+0

İyi, devam et! Bu noktaya geldiğinizde, bir alıştırmayı öneriyorum: kullanıcı ayarlarına bağlı olarak tüm renk şemasını değiştirecek bir uygulama yapmayı deneyin ve daha sonra arayüzlerin bunu nasıl yapmanıza yardımcı olabileceğini görün. – Groo

İlgili konular