如何将此代码包装为方法?

时间:2017-05-31 11:31:05

标签: c#

public class CustomFont
{
    public string ChangeFont(string font, string target)
    {
        PrivateFontCollection pfc = new PrivateFontCollection();
        int fontLength = Properties.Resources.font.Length;
        byte[] fontdata = Properties.Resources.font;
        System.IntPtr data = Marshal.AllocCoTaskMem(fontLength);
        Marshal.Copy(fontdata, 0, data, fontLength);
        pfc.AddMemoryFont(data, fontLength);
        target.Font = new Font(pfc.Families[0], target.Font.Size);
    }
}

I tried this but errors were shown that 'App.Properties.Resources' does not contain a definition for 'font'.

好的,所以我按照每个人的答案编辑了代码,现在几乎正常工作。问题是,我应该对byte[]使用什么方法?

public void ChangeFont(string font, TextBox target)
        {
            PrivateFontCollection pfc = new PrivateFontCollection();
            int fontLength = Properties.Resources.ResourceManager.GetString(font).Length;
            byte[] fontdata = Properties.Resources.font;
            System.IntPtr data = Marshal.AllocCoTaskMem(fontLength);
            Marshal.Copy(fontdata, 0, data, fontLength);
            pfc.AddMemoryFont(data, fontLength);
            target.Font = new Font(pfc.Families[0], target.Font.Size);
        }

1 个答案:

答案 0 :(得分:0)

您正在尝试按名称从资源中获取字符串。

你不能像

那样写
Properties.Resources.font;

您必须使用ResourceManager

string myString = Properties.Resources.ResourceManager.GetString(font);

然后你可以用那个字符串做任何你想做的事。

但是你的方法还有很多其他原因,你会遇到以下问题;例如没有返回值。