Po pominie ewentualnie 30-50 postów na tym, że w końcu udało się wymyślić rozwiązanie, które faktycznie działa! Należy wykonać następujące kroki:
1.) Dołącz plik czcionki (w moim przypadku plik ttf) do zasobów aplikacji. Aby to zrobić, kliknij dwukrotnie plik "Resources.resx".
2.) Zaznacz opcję "Dodaj zasób" i kliknij strzałkę w dół. Wybierz opcję "Dodaj istniejący plik". Teraz wyszukaj plik czcionki, wybierz go i kliknij OK. Zapisz plik "Resources.resx".
3.) Utwórz funkcję (powiedzmy, InitCustomLabelFont()), a następnie dodaj następujący kod w nim.
//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);
Twoja niestandardowa czcionka została dodana do kolekcji PrivateFontCollection.
4.) Następnie przypisz czcionkę do etykiety i dodaj do niej domyślny tekst.
//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. Przejdź do układu formularza i wybierz etykietę.Kliknij go prawym przyciskiem myszy i wybierz "Właściwości". Wyszukaj właściwość "UseCompatibleTextRendering" i ustaw ją na "True".
6. Jeśli jest to konieczne, możesz zwolnić czcionkę po upewnieniu się, że nigdy nie będzie można jej użyć ponownie. Zadzwoń pod numer PrivateFontCollection.Dispose() method, możesz także bezpiecznie zadzwonić do Marshal.FreeCoTaskMem (dane). Często zdarza się, że nie przejmuj się i nie ładuj czcionki przez całe życie aplikacji.
7.) Uruchom aplikację. Zobaczysz teraz, że dla danej etykiety ustawiono niestandardową czcionkę.
Pozdrawiam!
** UseCompatibleTextRendering ** nie jest konieczne, jeśli zarejestrować czcionkę z ** AddFontMemResourceEx() **. Jako bonus, czcionka staje się również użyteczna w TextBoxach i innych kontrolkach. Zobacz [tę odpowiedź] (http://stackoverflow.com/a/1956043/25312) i [dokumentacja MSDN] (https://msdn.microsoft.com/en-us/library/dd183325 (v = vs.85) .aspx). – SWB
Czy można to dodać do właściwości kontrolki, aby wybrać jedną z osadzonych czcionek lub normalną czcionkę? Przykład: 'private Font m_FontFace = UserControl.DefaultFont; public Font FontFace {get {return m_FontFace; } ustaw {m_FontFace = wartość; }} ' –
Niewielkie zalecenie do użytku w świecie rzeczywistym, upewnij się, że FreeCoTaskMem znajduje się w bloku finally, więc w przypadku wyjątków bufor pamięci zostanie zwolniony. – Rushyo