#c# #windows #fonts #custom-controls
#c# #Windows #шрифты #пользовательские элементы управления
Вопрос:
Я замечаю, что когда мы пытаемся перечислить шрифты с помощью C #, это работает нормально; однако, если мы хотим установить новый шрифт во время работы приложения, вызов перечисления шрифтов не возвращает новый шрифт, пока приложение не будет перезапущено.
Вот код:
public void Populate(bool b)
{
both = b;
foreach (FontFamily ff in FontFamily.Families)
{
if(ff.IsStyleAvailable(FontStyle.Regular))
Items.Add(ff.Name);
}
}
Примечания к вышеуказанному методу:
Items.Add()
добавляет элементы в a comboBox
.
Должно быть, я что-то неправильно понимаю. Как я могу заставить приведенный выше код запрашивать систему для шрифтов, даже новых?
Комментарии:
1. вы пытались вспомнить свой метод заполнения после установки нового шрифта на вашем компьютере? поскольку проблема в том, что приложение уже запущено, и заполнение шрифтов уже выполнено до установки новых шрифтов. Сделайте что-нибудь, чтобы обновить кнопку обновления, чтобы обновить список шрифтов в вашем выпадающем списке.
Ответ №1:
Вы пробовали с
using System.Drawing.Text;
InstalledFontCollection fonts = new InstalledFontCollection();
foreach (FontFamily ff in fonts.Families)
{
if (ff.IsStyleAvailable(FontStyle.Regular))
Items.Add(ff.Name);
}
Комментарии:
1. так что что-то вроде
var installed = new InstalledFontCollection(); foreach (FontFamily ff in installed.Families)
должно это сделать. я попробую, спасибо за направление.2. Это выглядит не совсем правильно. Вы не используете переменную fonts.
3. LarsTech, я исправил это для @Marco. Просто простая опечатка.
4. К сожалению, это не сработало; Мы открыли программу, она запустилась
populate
без проблем, и мы добавили новый шрифт через Windows (щелкнули по нему правой кнопкой мыши -> установить), а затем снова запустили populate, и он его не обнаружил. Мы перезапустили приложение, и оно обнаружилось нормально. Все та же проблема, похоже, что она не будет обнаружена, пока приложение не будет перезапущено.5. @zackrspv: это старое обсуждение , но, согласно этому, это проблема ОС. Может быть, они еще не исправили это?
Ответ №2:
public void Populate(bool b)
{
both = b;
InstalledFontCollection fonts = new InstalledFontCollection();
foreach (FontFamily ff in fonts.Families)
{
if (ff.IsStyleAvailable(FontStyle.Regular))
Items.Add(ff.Name);
}
}
Комментарии:
1. Хм, это кажется совершенно равным моему ответу 😉