Шрифт C# не изменится, но размер шрифта изменится в rich-textbox
I've downloaded several custom fonts. When the user presses a button I want the font of the text in a rich-textbox to change. But the fonts themselves don't change but the font size does. I also don't get any errors. When I install the font on my PC the font works perfectly. I can then also use it as the default font using the VS properties editor and can assign the font using both the codes below. But when I de-install the font it stops working again. It seems as if VS doesn't recognize the font even when using a direct directory link and just skips over/ignores the font part and just adjusts the size of the normal font. I have it working on labels but not on rich-textboxes.
Я просмотрел множество связанных с этим вопросов на этом форуме и в других местах, но ни один из них не сработал. Я хотел бы использовать пользовательские шрифты, которые пользователю не нужно устанавливать. Я также поместил шрифты в ресурсы с помощью Resources.resx и установил их в public.
Извините, если это глупый или легко решаемый вопрос, но я просто не могу заставить его работать с rich/textboxes.
Что я уже пробовал:
Это то, что я пробовал до сих пор:
PrivateFontCollection pfc = new PrivateFontCollection(); pfc.AddFontFile(@"C:\\Users\\MyName\\Documents\\Font\\6937\\HARRYP.ttf"); System.Drawing.Font font = new Font(pfc.Families[0], 12); richTextBox_Translate.Font = font;
И любая перестановка этого:
richTextBox_Translate.Font = new Font(@"C:\\Users\\Myname\\Documents\\Font\\6937\\HARRY P", 12); richTextBox_Translate.Font = new Font(@".\\Resources\\HARRY P", 12); richTextBox_Translate.Font = new Font("HARRY P", 12);
Шрифт действительно меняется, когда я использую стандартный шрифт±
richTextBox_Translate.Font = new Font("Comic Sans MS", 12);
И я нашел (несколько) из них, но они тоже не работают:
[DllImport("gdi32.dll")] private static extern IntPtr AddFontMemResourceEx(IntPtr pbFont, uint cbFont, IntPtr pdv, [In] ref uint pcFonts); PrivateFontCollection pFC = new PrivateFontCollection(); private void LoadFont() { Stream fontStream = new MemoryStream(Properties.Resources.DBSScouter); //create an unsafe memory block for the data System.IntPtr data = Marshal.AllocCoTaskMem((int)fontStream.Length); //create a buffer to read in to Byte[] fontData = new Byte[fontStream.Length]; //fetch the font program from the resource fontStream.Read(fontData, 0, (int)fontStream.Length); //copy the bytes to the unsafe memory block Marshal.Copy(fontData, 0, data, (int)fontStream.Length); // We HAVE to do this to register the font to the system (Weird .NET bug !) uint cFonts = 0; AddFontMemResourceEx(data, (uint)fontData.Length, IntPtr.Zero, ref cFonts); //pass the font to the font collection pFC.AddMemoryFont(data, (int)fontStream.Length); //close the resource stream fontStream.Close(); //free the unsafe memory Marshal.FreeCoTaskMem(data); System.Drawing.Font font = new Font(pFC.Families[0], 12); richTextBox_Translate.Font = font; }
Richard MacCutchan
"Но когда я деинсталлирую шрифт, он снова перестает работать."
Конечно, именно этого вы и ожидали?
db211086004
Да и нет, потому что я пытаюсь использовать пользовательский шрифт с заданным путем, который не работает, но после установки шрифта на машину (что я не хочу делать) он действительно работает. Я только упомянул, что деинсталляция останавливает его работу снова, потому что я хотел дать как можно больше информации, чтобы было легче придумать ответ.