Il posizionamento dei controlli nel mezzo di una Casella di controllo
Domanda
Questo è un follow-up per la mia domanda precedente "Font-dipendente di controllo di posizionamento."È un tentativo di risolvere il reale problema che si cela dietro a quella domanda, forse in modi diversi rispetto a quello che stavo chiedendo.
Esempio di problema economico: Voglio una casella di controllo che dice "Regolare i prezzi <X> <Y> dopo il caricamento," dove <X> è un numero---regolabili con NumericUpDown
---e <Y> è la "percentuale" o "dollari", con le scelte da parte di un ComboBox
.Questo sarà su una singola linea.
La complicazione: Voglio essere in grado di cambiare il mio font per tutti questi controlli (in pratica li per System.Drawing.Fonts.MessageBoxFont
, che è Tahoma 8 pt su Windows XP/etc.e Segoe UI 9 pt su Vista), senza rovinare il mio layout, che con il mio attuale Position
-proprietà--definizione di paradigma non funziona.
Più in generale, mi piacerebbe che i controlli dinamicamente disposti in un carattere indipendente, in modo che il <X> NumericUpDown
si adatta perfettamente nello spazio tra "di" e il <Y> ComboBox
, e allo stesso modo il <X> ComboBox
in sintonia con il rispetto per l' <X> CheckBox
e la stringa "dopo il caricamento" alla sua destra.
Parte tutto sembra perdere: Questo è nidificato all'interno di una CheckBox
.Così, idealmente, cliccando sulle parole "dopo il caricamento" dovrebbe selezionare/deselezionare la casella di controllo, e disegnare quel piccolo rettangolo di evidenziazione di tutto "Regolare i prezzi dopo il caricamento." Quindi basta schiaffi un extra Label
alla fine non funziona, perchè allora non passare il CheckBox
;allo stesso modo, cercando di band-aid cose da collegare ad un Label
's Click
evento non produrre il desiderato evidenziare-rettangolo.
Soluzioni? A questo punto sto pensando che sia:
Ripensare il problema, in qualche modo, magari con una brutta soluzione, come due linee separate di testo:"Regolare trovato i prezzi dopo il caricamento" (
CheckBox
), "Regolazione quantità:" (NumericUpDown
eComboBox
).Questo è davvero male, perché la mia casella delle opzioni è assolutamente pieno di opzioni di questo tipo (es.il tipo nell'esempio), quindi sarebbe almeno il doppio in dimensioni verticali.Una sorta di controllo personalizzato?
SplittableCheckBox
?Un qualche tipo di magia con un
TableLayout
di controllo?(Certo che questo non riesce a "parte tutto sembra perdere.)Rinunciare e tornare a MS Sans Serif, o utilizzare Tahoma uniformemente, o di un pacchetto Segoe UI con la mia domanda, quindi, mancare di rispetto il sistema di font di default.
(Nuovo, in via di modifica) Interruttore a WPF, se qualcuno mi convince che supporta questo scenario esattamente.
Soluzione
Se si dispone di diverse opzioni che seguono questo layout, perché non creare un controllo utente?Il controllo utente contiene la Casella di controllo, una NumericUpDown, una ComboBox e un'etichetta per il "dopo di caricamento".È possibile eseguire l'override OnFontChanged per regolare la posizione dei controlli basati sulla rappresentazione del testo con il font.Aggiungi un EventHandler per l'Etichetta per selezionare/deselezionare la Casella di controllo.
Come per avere il rettangolo circondano tutti i controlli, si dovrebbe essere in grado di dare all'utente il controllo di messa a fuoco durante uno dei suoi controlli interni è cliccato.