2015-05-16 7 views

risposta

6

Si potrebbe dare un'occhiata in TextRenderer.MeasureText().

Per calcolare la larghezza di un testo della didascalia utilizzare questo frammento:

var width = TextRenderer.MeasureText(caption, SystemFonts.CaptionFont).Width; 

Si potrebbe utilizzare la dimensione del vostro modulo, sottrarre un valore fisso per l'icona (se visibile) e i pulsanti in alto a destra (dipende dalla versione del sistema operativo e dallo stato visibile dei pulsanti [Riduci a icona] [Massimizza]) e controlla se è ancora positivo. Questo potrebbe non darti un risultato perfettamente accurato, ma probabilmente è l'approssimazione più semplice.

Finora, questo metodo sembra per calcolare un'approssimazione abbastanza preciso:

/// <summary> 
/// Calculates an approximation of the available caption width 
/// Depends on OS and theme 
/// </summary> 
/// <returns>Width</returns> 
private int CalcAvaliableCaptionWidth() 
{ 
    return 
    // Form width 
    Width 
    // Icon 
    - (Icon == null ? 0 : Icon.Width) 
    // Minimize button (26 on Win8) 
    - (MinimizeBox ? SystemInformation.CaptionButtonSize.Width : 0) 
    // Maximize button (26 on Win8) 
    - (MaximizeBox ? SystemInformation.CaptionButtonSize.Width : 0) 
    // Close button (45 on Win8) 
    - SystemInformation.CaptionButtonSize.Width; 
} 

si potrebbe provare la mia piccola applicazione verifica WinForm

verification WinForm application

Codice sorgente: https://gist.github.com/CodeZombieCH/b9def0b0d9c41a98593a

Grazie a @Plutonix per il suggerimento a SystemInformation.CaptionButtonSize.

+3

Sono sicuro che sai che questa risposta è incompleta. Come si trova se la dimensione del testo risultante si adatta all'area del titolo libera da pulsanti e icone standard per il menu di scelta rapida? – Steve

+3

usa 'System.Windows.Forms.SystemInformation.CaptionButtonSize' per ottenere la dimensione dei pulsanti standard della barra del titolo. Il numero di loro presenti dipenderà da altri oggetti di scena (MinimizeBox, ControlBox ecc.). – Plutonix

+0

CodeZombie e @Plutonix, grazie, ha funzionato perfettamente! – Mierzen