2009-06-21 6 views
6

Mi sono imbattuto in un "problema" che ritengo debba essere abbastanza comune e mi chiedevo se qualcuno potesse aiutare.Come posso creare un'enumerazione per i colori nell'applicazione dei moduli di finestra?

Sto costruendo un semplice modulo di Windows (utilizzando VB.NET) per un amico da utilizzare sul posto di lavoro. La sua azienda ha circa 10 schemi di colori specifici (hanno un elenco di valori RGB) che usano per il logo, il sito web ecc.

Voglio seguire questa combinazione di colori nella mia applicazione e, per semplificare lo sviluppo, vorrei costruire un'enumerazione di questi colori per evitare duro codifica il valore RBG per ogni etichetta, pannello ecc

il mio primo pensiero è stato quello di effettuare le seguenti operazioni:

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

Tuttavia, non è così semplice come una costante è necessario. Mi sono guardato su Internet e ho trovato un esempio di come ottenere ciò di cui avevo bisogno, ma sembrava eccessivamente complicato per quello che sembra un requisito abbastanza comune per lo sviluppo di applicazioni.

Qual è secondo te il modo migliore per risolvere questo problema?

Grazie molto

risposta

0

È possibile memorizzare le stesse informazioni in una classe con campi condivisi/proprietà e raggiungere lo stesso effetto con un'enumerazione.

Non vedere il punto perché è necessaria un'enumerazione qui a tutti

3

È possibile utilizzare un metodo di estensione. In primo luogo semplificare la vostra enum:

enum ColorType 
{ 
    CompanyDarkBlue, 
    CompanyBlue, 
    CompanyLightBlue 
} 

Il metodo di estensione sarà simile a questa:

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

questo vi permetterà di scrivere:

ColorType.CompanyDarkBlue.ToColor(); 

Per maggiori informazioni date un'occhiata al C#: Enhance Enums using Extension Methods

2

Metti questi colori in una classe separata e inseriscili come proprietà di enumerazione.

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 - Grazie. L'ho usato e tutto è andato bene. Grazie per aver dedicato del tempo per aiutare. –

3

Non direi che è necessario un elenco qui. Quando hai menzionato "schema colori", il modo usuale per farlo è usare il polimorfismo per consentire combinazioni di colori differenti.

Ciò significa che si avrebbe l'interfaccia come questa:

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

e quindi implementare in qualsiasi modo vi piaccia:

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

Nota che ho anche fatto queste proprietà virtuale, in modo che puoi facilmente sostituire i colori specifici solo se hai bisogno di uno schema leggermente diverso.

Per sfruttare al meglio questa astrazione, il programma dovrebbe utilizzare principalmente le proprietà di IColorScheme, senza essere a conoscenza dell'implementazione effettiva utilizzata. La corretta combinazione di colori dovrebbe essere istanziata separatamente, durante l'inizializzazione.

+0

Groo - Grazie per la risposta. Ho usato il codice di Wahib (vedi sotto). Come succede, "Interfacce" sono il prossimo capitolo del libro che sto leggendo e non ho ancora familiarità con loro. Una volta che avrò la testa intorno a loro proverò il tuo suggerimento come un esercizio di apprendimento –

+0

Buono, continua! Quando arriverai a quel punto, ti consiglierei un esercizio: prova a creare un'app che cambierebbe l'intera combinazione di colori in base alle impostazioni dell'utente e quindi scopri come le interfacce possono aiutarti a farlo. – Groo

Problemi correlati