2017-05-31 7 views
0
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

もしエラーがそうだとしたら、私はリソースにフォントのエントリがないと思います。リソースファイルを表示できますか? –

+1

プロジェクトのプロパティウィンドウを表示し、[リソース]セクションを選択します。リソースがないと表示された場合は、リソースを追加して必要な設定を追加する必要があります。 – Wheels73

+2

このコードにはさらに問題があります。 targetはstring型で、私が知っている文字列型はFontプロパティを持たない。メソッドのシグネチャでは必要であるとは言っても、結果は返されませんでした。 –

答えて

0

名前からリソースから文字列を取得しようとしています。

あなたは

Properties.Resources.font; 

ようにそれを書き込むことはできませんあなたはResourceManager

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

を使用する必要があります。そして、あなたがその文字列でやりたいことができます。

しかし、あなたの方法には次のような問題が生じる理由がたくさんあります。たとえば、戻り値はありません。

+0

'byte []'にはどのようなメソッドを使うべきですか? –

+0

[文字列をバイト配列に変換](https://stackoverflow.com/questions/16072709/converting-string-to-byte-array-in-c-sharp)をご覧ください。 –

関連する問題