Когда я показываю экземпляр WinForms.FontDialog (C#, .NET 2.0), мне не хватает некоторых шрифтов, которые, как я ожидаю, будут там (например, Courier, Fixedsys, MS Sans Serif). Кроме того, клиент жалуется, что установленные им шрифты Adobe также не отображаются в списке.
Как я могу заставить эти шрифты отображаться в этом диалоговом окне?





FontDialog был разработан, чтобы отображать только шрифты TrueType, чтобы оставаться совместимым с GDI +. Чтобы заставить его отображать шрифты устройства, нужно немного взломать Reflection:
using System.Reflection;
...
FontDialog fontDialog1 = new FontDialog();
MethodInfo mi = typeof(FontDialog).GetMethod("SetOption",
BindingFlags.NonPublic | BindingFlags.Instance);
mi.Invoke(fontDialog1, new object[] { 0x40000, false });
fontDialog1.ShowDialog();
Я не знаю, поддерживает ли это также шрифты Adobe OpenType, у меня их нет. Дайте нам знать.
Конечно, ожидается, что OP сделает с ними что-то еще.
Есть ли какое-либо переопределение, чтобы в диалоговом окне шрифтов отображались только допустимые шрифты истинного типа.
FontDialog was designed to only show TrueType fonts to stay compatible with GDI+
Это не приведет к возникновению исключения «Недействительный шрифт», поскольку GDI + поддерживает только шрифты истинного типа.