• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:C#のビルド方法について教えてください。)

C#のビルド方法について教えてください。

このQ&Aのポイント
  • C#初心者の方が、プライベートフォントのファイル(ttfファイル)をAddFontFileで取り込み、ビルドする方法について教えてください。
  • デバッグ中は、C empの下にttfファイルを置くことで正常に動作するのですが、ビルドしてもうまく動作しないため、ttfファイルをビルドに含める方法を知りたいです。
  • フォントをインストールする手間を避けたいため、ファイルを置く方法以外でビルドできる方法があれば教えてください。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.2

テキストボックスじゃ反映されないみたいですね。(フォントの名前だけは設定されてるみたいですが) ピクチャーボックスに描く場合にはちゃんとフォントが反映されましたが…… private PrivateFontCollection pfc = new PrivateFontCollection(); private void pictureBox1_Paint(object sender, PaintEventArgs e) { // フォントリソースの取得 byte[] FontByte = Resource1.chupson; // Visual Studio上で組み込んだフォントリソース IntPtr FontPtr = Marshal.AllocHGlobal(Marshal.SizeOf(FontByte[0]) * FontByte.Length); try { Marshal.Copy(FontByte, 0, FontPtr, FontByte.Length); this.pfc.AddMemoryFont(FontPtr, FontByte.Length); Font font1 = new Font(this.pfc.Families[0], 36); SolidBrush brush1 = new SolidBrush(Color.Black); RectangleF drawRect = pictureBox1.ClientRectangle; e.Graphics.DrawString("piyo", font1, brush1, drawRect); } catch (Exception) { Marshal.FreeHGlobal(FontPtr); } }

mikeyan
質問者

お礼

ありがとうございます。 確かにPictureBoxだとうまくいくようです。 textBoxやLabelではFontのフォルダにttfファイルがないとだめみたいです。 そういう仕様なのか、バグなのかわかりませんが。。 PictureBoxに変更することを検討してみます。

その他の回答 (1)

回答No.1

フォントファイルをリソースに取り込み、使用時はAddMemoryFontで追加すれば良いかと。 下記リンク先はVBのコードですが、C#でも同様にやれば良いはず。 http://blogs.wankuma.com/youryella/archive/2007/11/05/106185.aspx

mikeyan
質問者

補足

ありがとうございます。 リソースにフォントファイルを取り込んで、 リンク先のコードをC#に変換して実行してみたのですが、変換されませんでした。 しかし、C:\WINDOWS\Fontsにフォントをインストールしておくとちゃんと変換されるようです。 つまりフォントファミリーには追加されているにもかかわらず、 リソースのファイルを読んでいないということでしょうか? コード・・・ using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using System.Drawing.Text; using System.Runtime.InteropServices; namespace WindowsFormsApplication1 { public partial class Form1 : Form { public Form1() { InitializeComponent(); } PrivateFontCollection pfc = new PrivateFontCollection() ; private void Form1_Load(object sender, EventArgs e) { Byte[] fontByte = Properties.Resources.[プライベートフォントファイル名]; IntPtr fontPtr = Marshal.AllocHGlobal(Marshal.SizeOf(typeof(Byte))* fontByte.Length); try { Marshal.Copy(fontByte, 0, fontPtr, fontByte.Length); this.pfc.AddMemoryFont(fontPtr, fontByte.Length); } finally { Marshal.FreeHGlobal(fontPtr); } label1.Font = new Font(this.pfc.Families[0], 12); label1.Text = pfc.Families[0].Name; } } }

関連するQ&A