我的Winform上有一个标签,我想使用一种名为XCalibur的自定义字体,使其显得更加时髦。
如果我在标签上使用自定义字体,然后构建解决方案,然后.ZIP \ bin \ Release中的文件,最终用户将看到我使用的自定义应用程序的标签,无论他们是否安装了该字体?
如果不是这样,那么在Labels.Text上使用自定义字体的正确方法是什么?
答案 0 :(得分:32)
通过查看可能30-50个帖子后,我终于能够找到一个真正有效的解决方案! 请按顺序执行以下步骤:
1。)在您的应用程序资源中包含您的字体文件(在我的情况下,ttf文件)。为此,请双击" Resources.resx "文件。
2。)突出显示"添加资源"选项并单击向下箭头。选择"添加现有文件"选项。现在,搜索您的字体文件,选择它,然后单击“确定”。保存" 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.)接下来,将字体分配给Label,并在其中添加一些默认文本。
//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 "并将其设置为" True "。
6。)如果有必要,您可以在确定它永远不会再次使用后释放字体。调用PrivateFontCollection.Dispose() method,然后您也可以安全地调用Marshal.FreeCoTaskMem(数据)。通常不打扰并在应用程序的生命周期中加载字体。
7。)运行您的应用程序。您现在将看到已为给定标签设置了自定义字体。
干杯!
答案 1 :(得分:25)
将字体嵌入为资源(或仅将其包含在bin目录中),然后使用PrivateFontCollection
加载字体(请参阅AddFontFile
和AddMemoryFont
函数)。然后,您可以使用与计算机上安装的字体相同的字体。
PrivateFontCollection类允许 应用程序安装私有 没有的现有字体的版本 要求更换系统 版本的字体。例如,GDI + 可以创建一个私有版本 Arial字体除了Arial之外 系统使用的字体。 也可以使用PrivateFontCollection 安装不存在的字体 操作系统。
答案 2 :(得分:5)
我认为解决方案是将所需的字体嵌入到您的应用程序中。
试试这个链接:
http://www.emoreau.com/Entries/Articles/2007/10/Embedding-a-font-into-an-application.aspx
答案 3 :(得分:3)
添加您要使用的字体。
`
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);
}