2015-05-16 2 views
5

Есть ли способ определить, будет ли текстовое свойство формы вписываться в верхнюю панель с использованием текущей ширины формы (или если она будет усечена с помощью «...»)?Есть ли способ определить, будет ли текст формы вписываться?

enter image description here

+1

[Нет] (http://blogs.msdn.com/b/oldnewthing/archive/2015/05/08/10613194.aspx). –

ответ

6

Вы можете заглянуть в TextRenderer.MeasureText().

Чтобы вычислить ширину текста заголовка используйте этот фрагмент:

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

Вы можете использовать размер вашей формы, вычитать фиксированное значение для значка (если он виден) и кнопки в правом верхнем углу (зависит от версии ОС и от видимого состояния кнопок [Свернуть] [Максимизировать]) и проверьте, все ли это положительно. Это не может дать вам совершенно точный результат, но это, вероятно, самое простое приближение.

До сих пор этот метод кажется вычислить довольно точное приближение:

/// <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; 
} 

Вы можете попробовать мое маленькое приложение, проверка WinForm

verification WinForm application

Исходный код: https://gist.github.com/CodeZombieCH/b9def0b0d9c41a98593a

Спасибо @Plutonix за подсказку SystemInformation.CaptionButtonSize.

+3

Уверен, вы знаете, что этот ответ неполный. Как вы обнаружите, будет ли полученный TextSize в форме Caption area без стандартных кнопок и значков для контекстного меню? – Steve

+3

используйте 'System.Windows.Forms.SystemInformation.CaptionButtonSize', чтобы получить размер стандартных кнопок заголовка. Количество присутствующих будет зависеть от других реквизитов формы (MinimizeBox, ControlBox и т. Д.). – Plutonix

+0

CodeZombie и @Plutonix, спасибо, это сработало отлично! – Mierzen

Смежные вопросы