Ho un controllo utente WinForms e sto cercando di ottenere l'esatta spaziatura orizzontale dei caratteri per il carattere corrente, che dovrebbe essere mono-spaziato.Ottiene le metriche di un font in pixel
Sembra che la proprietà Size
del font fornisca questa informazione, ma apparentemente è a punti e sto lavorando in pixel.
var fontWidth = this.Font.Size; // Returns em-size in points--not pixels
Se creo il carattere da solo, posso specificare che utilizza le unità Pixel. Ma nel mio caso il carattere è impostato tramite una proprietà del mio controllo utente e non riesco a determinare come viene creato il carattere. Sfortunatamente, la proprietà Unit
del font è di sola lettura.
Come è possibile rendere una metrica di ritorno dei caratteri esistente in pixel?
Font.Size restituisce l'altezza * * del carattere, non la larghezza. Avrai bisogno di misurare con, ad esempio, TextRenderer.MeasureText(); Doloroso a causa del padding. Misura, diciamo, nuova stringa ('m', 100) e dividi per 100. –
Grazie, ero abituato a sentire em nel contesto della larghezza. Ho visto 'Graphics.MeasureString' ma sembra che' MeasureText' sia in pixel. Lo verificherò, anche se sto iniziando a pensare che il mio approccio migliore sia quello di aggiungere dichiarazioni per chiamare la funzione 'GetTextMetrics' di Windows. –
@JonathanWood: MeasureText o MeasureString non forniscono la spaziatura dei caratteri, vero? – Neolisk