C'è un modo per determinare se la proprietà del testo del modulo si adatta alla barra in alto utilizzando la larghezza corrente del modulo (o se verrà troncata con "...")?C'è un modo per determinare se il testo di un modulo si adatta?
risposta
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
Codice sorgente: https://gist.github.com/CodeZombieCH/b9def0b0d9c41a98593a
Grazie a @Plutonix per il suggerimento a SystemInformation.CaptionButtonSize
.
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
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
CodeZombie e @Plutonix, grazie, ha funzionato perfettamente! – Mierzen
[No] (http://blogs.msdn.com/b/oldnewthing/archive/2015/05/08/10613194.aspx). –