所以,没有人感到困惑,设置基本上是主要的解决方案,然后是第二个带有自定义控件的解决方案。第一张图片来自主要解决方案,它显示了我在运行时获得的错误。我使用GetFontFromBytes
来使用项目资源中隐藏的字体文件。第二张图片来自第二个解决方案。我想要做的是让我的一个控件产生许多其他控件作为孩子
下面是我为访问我的字体而编写的代码。
private Font GetFontFromBytes(byte[] bytes, float size)
{
PrivateFontCollection pfc = new PrivateFontCollection();
IntPtr ptr = Marshal.AllocCoTaskMem(bytes.Length);
Marshal.Copy(bytes, 0, ptr, bytes.Length);
pfc.AddMemoryFont(ptr, bytes.Length);
Marshal.FreeCoTaskMem(ptr);
return new Font(pfc.Families[0], size);
}
感谢任何和所有帮助。如果需要更多信息,请告诉我您的需求。
修改
为了测试和方便,我已经从通过内存加载字体转移到本地文件。但是,出乎意料的是,我现在遇到加载第一个字体的问题,之后没有字体会加载,因为第一个字体没有加载(错误:CS0103"名称'名称&# 39;当前上下文中不存在")。如果除PrivateFontCollection
之外还有其他方法可以使用自定义字体,请告诉我,否则我需要对我的问题进行某种修复。
EDIT2 还应该注意的是,我的代码已被调整为只有自由分配的内存并在表单关闭时处理(可怕的)PFC。