Подтвердить что ты не робот

Стандартный шрифт для приложения Windows Forms

Каждый раз, когда я создаю новую форму в своем приложении, по умолчанию используется шрифт Microsoft Sans Serif, 8.25pt. Я не меняю его, потому что знаю, что в этом случае моя форма должна забрать все, что по умолчанию используется для системы. Тем не менее, когда я запускаю свое приложение, шрифт, который используется, все еще ничего, кроме Segoe UI (мой системный шрифт по умолчанию в моей ОС Windows Vista).

Почему это происходит? Как я могу убедиться, что мое приложение выглядит как обычное приложение Windows?

4b9b3361

Ответ 1

Отметьте эту запись , говоря о шрифте по умолчанию в Forms, который приводит к проблеме, которую вы испытываете, и это Подключить ошибку с ответом Microsoft. Короче говоря, просто кажется, что Forms не получает (правильный) шрифт Windows по умолчанию (который вы изменили).

Ответ 2

Принятый ответ не отвечает на вопрос; это просто объясняет, почему такое поведение происходит.

Некоторые из других ответов предлагают сложные методы обхода, но я нашел, что лучшим решением на самом деле является создание базовой формы, в которой все формы в приложении наследуются и устанавливают эту базовую форму. Свойство Font в SystemFonts.MessageBoxFont в конструктор. Это не только гарантирует, что ваше приложение подберет правильный шрифт во время выполнения на основе пользовательской среды (отвлекаясь от потенциальной проблемы, возникшей у Hans Passant-XP без Office 2007, прибегнет к Microsoft Sans Serif при отсутствии пользовательского интерфейса Segoe), но также дает вам дизайн-время поддержку вашего текущего шрифта Windows. Использование правильного шрифта во время разработки решает проблему Josuegomes, потому что любой элемент управления контейнером, созданный в форме, будет забирать шрифт, используемый формой во время разработки.

Помимо вышеупомянутых преимуществ, это освобождает вас от необходимости запоминать конструктор для каждой создаваемой формы и обеспечивает согласованность во всех формах вашего приложения, а также дает вам возможность использовать другие общие функции. Я использую это несколькими способами, такими как p/invoking и т.д., Чтобы исправить ошибки в реализации WinForms.

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

myControl.Font = New Font(Me.Font, FontStyle.Bold)

Ответ 3

Вы можете добавить до InitializeComponent() в конструкторе (-ах) формы:

this.Font = SystemFonts.MessageBoxFont;

Это похоже на работу с Windows XP и Windows Vista.

Ответ 4

Да, он использует шрифт, возвращаемый GetStockObject(DEFAULT_GUI_FONT). Это MS Sans Serif. Старый шрифт, давно ушедший с большинства машин. Переводчик шрифтов переводит его, не удивительно, Microsoft Sans Serif.

Нет документальной процедуры, о которой я знаю, чтобы изменить этот шрифт по умолчанию, в документах SDK указано MS Sans Serif явно. Если вы хотите Сего, вам придется попросить об этом. Что не так безопасно, все еще есть много компьютеров XP без Office 2007. Шрифт mapper переведет его на машину, у которой нет Segoe. Не знаю, что всплывает, у меня больше нет такой машины.

Ответ 5

Настройка формы Свойство шрифта для SystemFonts.DialogFont не работает, если у вас есть группы с соответствующими элементами управления. Свойство Font формы не влияет на элементы управления внутри поля группы. Я "решил" это, установив свойство Font в SystemFonts.DialogFont для каждого группового поля.

Ответ 6

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

        foreach (Control ctr in this.Controls)
        {
            ctr.Font = SystemFonts.IconTitleFont;

            // controls in groupboxes are not child of main form
            if (ctr.HasChildren)
            {
                foreach (Control childControl in ctr.Controls)
                {
                    childControl.Font = SystemFonts.IconTitleFont;
                }
            }        
        }

Ответ 7

Попробуйте это, щелкните форму и измените размер шрифта, например, я изменил размер шрифта формы до 12pt, а затем проверил текстовое поле перетаскивания в форму. Вы увидите, размер текстового поля также изменяется на 12pt. Я получил это решение случайно.

Ответ 8

Control.DefaultFont - ReadOnly; один хриплый должен был перезаписать, чтобы использовать отражение.

Type settingsType = typeof(Control);
var defaultFontField = settingsType.GetField("defaultFont", BindingFlags.Static | BindingFlags.NonPublic);
defaultFontField.SetValue(null, new Font("Segoe UI", 8.25F));

Убедитесь, что UT следит за этим кодом, нет договора API, который защитит вас, если будет изменена реализация Framework.

Также обратите внимание на конструктор форм, который большую часть времени будет вставлять шрифт в класс .designer.