Ho una classe che viene utilizzata per creare una GUI "impostazioni" per qualsiasi altra classe.
Usogliattributiperdecorareisingolielementi.Adesempio,puoispecificareToolTipText:
[Attributes.Display(ToolTipText="IP Address of target computer")]
public string IPAddress;
Ora, la domanda vera: Vorrei aggiungere funzionalità al display per creare una casella di gruppo attorno a diversi elementi. Il mio problema è che non c'è un campo "GroupBox" o un membro già lì da decorare.
Ho avuto alcune idee su come affrontarlo:
-
Forza la classe a contenere un
private
GroupBox
che può essere decorato. i campi sarebbero decorati per assegnarsi aGroupBox
. Mi piace che ci sia qualcosa reale da decorare. Non mi piace che in realtà non ci appartenga. Un altro problema: se volessi creare ancora un altroGroupBox
come figlio di questo, sarebbe difficile ordinare gli articoli all'interno del primoGroupBox
(attualmente l'ordine è controllato dall'ordine del codice di classe stesso)A. Come (1), ma la modifica della
GroupBox
potrebbe essere eseguita nel costruttore della classe delle impostazioni.B. Uguale a (1), ma la classe delle impostazioni potrebbe sottoscrivere un evento "Disegna" e personalizzare l'ordine dei controlli lì.
-
Ignora che non c'è un oggetto "fisico" da decorare e aggiungi un attributo chiamato
GroupBoxName
che i campi potrebbero avere. Qualsiasi campo contenente lo stessoGroupBoxName
verrebbe raggruppato insieme.GroupBoxName
potrebbe contenere un "percorso" per creare "subGroupBoxes
" (ad esempio"ParentBox/ChildBox"
). Il problema con questo approccio è come modifico la scatola stessa? Cosa succede se voglio che la casella abbiaBackColor = Color.Green
? Potrei iscrivermi a un evento con la classe delle impostazioni e specificare lì.
Quindi, in sostanza sto cercando idee su come affrontarlo. Mi piacerebbe che il lavoro della classe delle impostazioni fosse il più intuitivo possibile pur consentendo una certa flessibilità. Mi piacerebbe anche progettarlo in modo tale che non abbia la sensazione di "odore di codice".