C # WinForms FontDialog не может быть инициализирован с некоторыми шрифтами? - PullRequest
3 голосов
/ 21 апреля 2011

Я использую VS C # 2008 Express.

Я добавляю возможность сохранять и извлекать выбор шрифта пользователя в мое приложение, используя стандартный элемент управления FontDialog.

Во время тестирования у меня естьзаметил, что некоторые шрифты не инициализируют диалог полностью - имя не отображается в поле «Шрифт», а образец пуст.

Это шрифты, в которых часть имени отображается в «Шрифт».Список стилей в диалоговом окне: «Arial Black», «Segoe UI Light», «Segoe UI Semibold» и т. Д. (Хотя, что интересно, «Arial Narrow» работает должным образом.)

Я вижута же проблема, независимо от того, инициализирую ли я шрифт диалога в коде или если я установил свойства элемента управления FontDialog для одного из перечисленных выше проблемных шрифтов в IDE.элемент управления FontDialog, запускаемый кнопкой и устанавливающий для его свойства шрифта значение «Arial Black» с размером 16.

Есть ли способ решить эту проблему?

Добавлена ​​информация: Tего проблема проявляется в 64-битной системе Windows 7.В Vista и XP Arial Black и Arial Narrow перечислены как отдельные шрифты, а не как Arial с черными и узкими стилями.Таким образом, похоже, что Microsoft делает что-то другое с обычным диалогом шрифтов в Win7.

1 Ответ

3 голосов
/ 22 апреля 2011

Я могу подтвердить это поведение, вам следует подождать и посмотреть, предложит ли кто-нибудь однозначное объяснение, почему это правильно, и, если никто не предложит, сообщите об этом через Microsoft Connect .

Вот как воспроизвести проблему, используйте LINQPad и выполните следующую программу:

void Main()
{
    using (var dlg = new FontDialog())
    {
        dlg.Font = new Font("Arial Black", 16);
        dlg.Font.Dump("before");
        dlg.ShowDialog();
        dlg.Font.Dump("between");
        dlg.ShowDialog();
        dlg.Font.Dump("after");
    }
}

используйте F4, чтобы добавить ссылки на System.Drawing и System.Windows.Forms, и нажмите Ctrl + . на Font и FontDialog, чтобы добавить необходимые выражения с помощью

Тогда заметьте, что:

  1. Arial Black не выбирается при первом показе
  2. Если вы в первый раз выбрали Arial, а затем выберите Черный в палитре стилей шрифтов, нажмите кнопку ОК, появится диалоговое окно без выбранного шрифта.
  3. Единственное, что отличается между 3 дампами шрифта (при условии, что вы выбрали Arial, Black, 16 раз), это то, что размер немного отличается от диалогов (15.75pt против 16pt). Кроме того, OriginalFontName остается как null после диалогов. Название шрифта, тем не менее, «Arial Black».

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

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