Использование пользовательских шрифтов на ярлыке на Winforms

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

Если я использую нестандартный шрифт для метки, а затем создаю решение, а затем .ZIP файлы в \ bin \ Release, увидит ли конечный пользователь метки с моим собственным приложением, которое я использовал, независимо от того, установлен ли этот шрифт или нет?

Если это нев таком случае, чтоправильный способ использовать пользовательские шрифты на Labels.Text?

Ответы на вопрос(4)

возможно, 30-50 постов на эту тему, я наконец-то смог найти решение, которое действительно работает! Пожалуйста, следуйте инструкциям последовательно:

1.) Включите ваш файл шрифта (в моем случае, файл ttf) в ресурсы вашего приложения. Для этого дважды щелкните наResources.resx» файл.

2.) ВыделитеДобавить ресурс » вариант и нажмите стрелку вниз. Выбрать "Добавить существующий файл " вариант. Теперь найдите файл шрифта, выберите его и нажмите OK. Спасти "Resources.resx» файл.

3.) Создайте функцию (скажем, InitCustomLabelFont ()) и добавьте в нее следующий код.

        //Create your private font collection object.
        PrivateFontCollection pfc = new PrivateFontCollection();

        //Select your font from the resources.
        //My font here is "Digireu.ttf"
        int fontLength = Properties.Resources.Digireu.Length;

        // create a buffer to read in to
        byte[] fontdata = Properties.Resources.Digireu;

        // create an unsafe memory block for the font data
        System.IntPtr data = Marshal.AllocCoTaskMem(fontLength);

        // copy the bytes to the unsafe memory block
        Marshal.Copy(fontdata, 0, data, fontLength);

        // pass the font to the font collection
        pfc.AddMemoryFont(data, fontLength);

Ваш пользовательский шрифт был добавлен в PrivateFontCollection.

4.) Затем назначьте шрифт для вашей метки и добавьте в него текст по умолчанию.

        //After that we can create font and assign font to label
        label1.Font = new Font(pfc.Families[0], label1.Font.Size);
        label1.Text = "My new font";

5.) Перейдите к макету формы и выберите ярлык. Щелкните правой кнопкой мыши и выберите «Свойства», Ищите недвижимость "UseCompatibleTextRendering» и установите его в "Правда".

6.) При необходимости вы можете освободить шрифт, если вы уверены, что он никогда не сможет быть использован снова. ПозвонитеPrivateFontCollection.Dispose () методВы также можете безопасно вызвать Marshal.FreeCoTaskMem (data). Довольно часто не беспокоиться и оставить шрифт загруженным на всю жизнь приложения.

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

Ура!

 mrid09 мар. 2018 г., 15:23
это работает на системе, которую я разработал, но неработать на других системах
 Rushyo22 февр. 2017 г., 07:03
Незначительная рекомендация для использования в реальном мире, убедитесь, что FreeCoTaskMem находится в блоке finally, поэтому в случае исключений буфер памяти будет освобожден.
 Arvo Bowen08 дек. 2016 г., 23:51
Может ли это быть добавлено к элементу управления?s свойство выбрать один из встроенных шрифтов или обычный шрифт? Пример:private Font m_FontFace = UserControl.DefaultFont; public Font FontFace { get { return m_FontFace; } set { m_FontFace = value; } }
 SWB04 мар. 2015 г., 03:24
UseCompatibleTextRendering не требуется, если вы регистрируете шрифт сAddFontMemResourceEx (), В качестве бонуса шрифт также можно использовать с текстовыми полями и другими элементами управления. Увидетьэтот ответ иДокументация MSDN.

    PrivateFontCollection modernFont = new PrivateFontCollection();

    modernFont.AddFontFile("Font.otf");

    label.Font = new Font(modernFont.Families[0], 40);`

Я также сделал метод.

 void UseCustomFont(string name, int size, Label label)
    {

        PrivateFontCollection modernFont = new PrivateFontCollection();

        modernFont.AddFontFile(name);

        label.Font = new Font(modernFont.Families[0], size);


    }

 Fusseldieb19 окт. 2017 г., 22:17
Дает "System.Runtime.InteropServices.ExternalException: общая ошибка в GDI + »
Решение Вопроса

in), а затем используйтеPrivateFontCollection загрузить шрифт (см.AddFontFile а такжеAddMemoryFont функции). Затем вы используете шрифт, как обычно, установленный на компьютере.

Класс PrivateFontCollection позволяет приложениям устанавливать закрытую версию существующего шрифта без необходимости замены системной версии шрифта. Например, GDI + может создать частную версию шрифта Arial в дополнение к шрифту Arial, который используется системой. PrivateFontCollection также можно использовать для установки шрифтов, которые не существуют в операционной системе.

Источник

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

Попробуйте эту ссылку:

http://www.emoreau.com/Entries/Articles/2007/10/Embedding-a-font-into-an-application.aspx

Ваш ответ на вопрос