Наследование шрифтов в Windows Forms - PullRequest
3 голосов
/ 02 июля 2011

Это, вероятно, глупый вопрос с тривиальным ответом, но я рисую здесь пробел и хотел бы получить некоторую помощь.

Предположим, у меня есть две формы в приложении Windows Forms: главное окно идочернее окно, которое будет отображаться как диалог первого.Главное окно содержит набор элементов управления, включая полосу меню и панель инструментов.

Как я могу гарантировать, что все элементы управления в обеих формах будут использовать один и тот же настраиваемый пользователем шрифт?Очень быстро протестировав это с помощью дизайнера VS, я установил для свойства Font главной формы значение, отличное от значения по умолчанию, и обеспечил, чтобы все элементы управления в этой форме были установлены по умолчанию.Это приводит к соответствующей корректировке некоторых элементов управления, но шрифт полосы меню и панели инструментов остается неизменным / по умолчанию.Это сделано с помощью этих элементов управления или есть что-то очевидное, что я упускаю?

Что касается второй формы, я отображаю эту форму как дочерний диалог основной формы.Если я явно не установлю шрифт дочерней формы, он не будет отображаться с использованием того же шрифта, что и основная форма (несмотря на то, что он настроен с использованием шрифта по умолчанию).Правильный ли подход шрифта диалоговых окон к родительскому, или я что-то упустил?

Опять же, просто для ясности.В моем коде есть только одно место, где задается свойство Font, и оно находится в главной форме.У меня нет проблем, потому что элементы управления / формы установлены явно.

Спасибо за вашу помощь заранее!

Ответы [ 3 ]

12 голосов
/ 02 июля 2011

Это не совсем наследование, функция называется «свойство окружения».Если свойство Font не было назначено ни в конструкторе (показанном полужирным шрифтом ), ни в коде, тогда элемент управления использует свойство Font своего родительского элемента.Что очень удобно, оно обеспечивает очень непротиворечивый внешний вид и помогает обеспечить согласованность макетов на машинах, работающих с различными настройками видео точек на дюйм.Другими внешними свойствами являются BackColor, ForeColor, Cursor, RightToLeft.Есть слежка, чтобы убедиться, что это все еще работает, если Родитель изменился или родитель изменил значение своего свойства.

Что следует, так это то, что доллар останавливается, когда Родителя больше нет.Что происходит с формой, у нее нет родителя.Поэтому вам нужно назначить свойство Font формы, если вы хотите использовать значение, отличное от того, которое вы выбрали в конструкторе.Легко сделать:

var frm = new Form2();
frm.Font = this.Font;
frm.Show();

Классы ToolStrip и MenuStrip ведут себя немного по-разному.Если явно не назначено, они инициализируют свой шрифт из системных настроек.Пользователь может выбрать начертание шрифта и размер шрифта, которые он предпочитает, в апплете «Дисплей» на панели управления («Персонализация» в Windows 7).Отмена этого выбора, безусловно, возможна, но вы, как правило, не должны этого делать и соблюдать предпочтения пользователя.Диалоговое окно панели управления выглядит следующим образом:

enter image description here

1 голос
/ 02 июля 2011

Как сказал Нил, вы можете передать шрифт как параметр всей дочерней формы.

Но вы также можете иметь статический класс, который будет содержать шрифт, и вся ваша форма может просто получить хорошийшрифт из него и применить его к себе.Это можно задать в основной форме и прочитать из всех других форм.

0 голосов
/ 02 июля 2011

Почему бы просто не сделать параметр Font параметром в конструкторе любой порожденной формы?

Когда формы порождаются, они получают шрифт, переданный из родительской формы, и все они задаются в главной форме.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...