Domanda

Mi piacerebbe utilizzare Segoe UI 9 pt su Vista e Tahoma 8 pt su Windows XP/ecc.(In realtà, mi accontenterei di Segoe UI su entrambi, ma i miei utenti probabilmente non l'hanno installato.) Ma, essendo abbastanza diversi, rovinano davvero il layout dei miei moduli.COSÌ...c'è un buon modo per affrontare questo problema?

Un esempio:Ho un Label, con uno spazio vuoto al centro, nel quale inserisco a NumericUpDown controllo.Se utilizzo l'interfaccia utente di Segoe, il file NumericUpDown è circa 5 pixel circa a sinistra dello spazio vuoto, rispetto a quando uso Tahoma.Questo è un dolore;Non sono sicuro di cosa fare qui.

Quindi più specificatamente la mia domanda sarebbe:come posso posizionare i controlli nel mezzo di uno spazio vuoto nel mio file Labels (o CheckBoxes, ecc.)?Più in generale:esiste un buon modo per gestire diversi tipi di carattere in Windows Forms?

Modificare:Non credo che la gente abbia capito la domanda.io so come variare i miei caratteri basato sul sistema operativo.È solo che non so come farlo affrontare i problemi di layout che derivano da ciò.

Rispondi ad ajryan, quick_dry:OK, ragazzi, avete capito la domanda.Immagino che MeasureString potrebbe funzionare, anche se sarei interessato a un'ulteriore esplorazione di modi migliori per risolvere questo problema.

Il problema con la suddivisione del controllo è più evidente, ad esempio, con a CheckBox.Lì, se l'utente fa clic sulla "seconda metà" del CheckBox (che sarebbe un file Label controllo, immagino), il CheckBox non cambia stato.

È stato utile?

Soluzione

È strano dover disporre un controllo all'interno di un altro.Potresti risolvere un problema a monte in modo errato.Sei in grado di dividere l'etichetta in due etichette con l'alto verso il basso in mezzo e magari fare affidamento su un pannello TableLayout di Windows Forms?

Se è essenziale provare a posizionarsi in base alle dimensioni dei caratteri, potresti utilizzare Graphics.MeasureString("Stringa prima dell'updown", myLabel.Font)

Se quello che cerchi è il posizionamento dei controlli dipendente dal carattere, probabilmente dovresti rinominare la domanda.


[modifica] Puoi gestire l'evento clic della parte "seconda metà" dell'etichetta e modificare lo stato della casella di controllo su quell'evento.L'intera faccenda sembra però un hack.Qual è il problema risolto da questo strano layout di controllo?Perché hai bisogno di un su-giù nel mezzo di un'etichetta?

Altri suggerimenti

Sono favorevole all'utilizzo di TableLayoutPanel per i controlli in linea a riga singola.

Di solito imposto ogni colonna e la prima riga su AutoSize e imposto la proprietà Dock di ciascun controllo figlio su Compila la finestra di progettazione.Ciò consente di visualizzare correttamente il layout orizzontale.Per allineare il testo tra etichette/caselle di testo, impostare la proprietà TextAlign su MiddleLeft.

Se il testo scorre alla riga successiva non c'è una soluzione facile.Usare Graphics.MeasureString/TextRenderer.MeasureText e qualche logica di avvolgimento elaborato è la soluzione migliore :(

Prima di tutto, puoi scoprire quale versione di Windows stai utilizzando con SistemaOperativo.Piattaforma proprietà nella libreria di sistema.

In secondo luogo, è possibile inserire le impostazioni del carattere nei file di risorse e determinare quale file di risorse utilizzare in base a determinate condizioni (ad esempio, la versione del sistema operativo).

Personalmente, però, penso che sarebbe carino lasciare che fosse l'utente a determinare i caratteri che Essi preferisci rispetto al carattere che desideri che utilizzino.

Infine, potresti voler dare un'occhiata a WPF poiché questo è uno degli spazi problematici che è stato progettato per risolvere.

il problema è risolvere il posizionamento dei controlli?cioè.sai che i caratteri X e Y funzionano sui sistemi operativi A e B e fornisci il layout che desideri con il testo che stai utilizzando su quei sistemi?

Il metodo MeasureString potrebbe aiutarti a elaborare il tuo layout in modo da non essere legato a caratteri specifici.

float textWidth = graphics.MeasureString(someString, someFont).Width;

(una modifica nell'allineamento del testo funzionerebbe?forse anch'io ho frainteso il problema)

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top