web-dev-qa-db-ja.com

Winformsのラベルでカスタムフォントを使用する

Winformにラベルがあり、XCaliburというカスタムフォントを使用して、見栄えを良くしたいと考えています。

ラベルにカスタムフォントを使用してソリューションをビルドし、\ bin\Release内のファイルを.Zipすると、そのフォントがインストールされているかどうかに関係なく、エンドユーザーに使用したカスタムアプリのラベルが表示されますか?

そうでない場合、Labels.Textでカスタムフォントを使用する適切な方法は何ですか?

16
Sergio Tapia

フォントをリソースとして埋め込み(または単にbinディレクトリに含めます)、 PrivateFontCollection を使用してフォントをロードします(AddFontFileおよびAddMemoryFont関数を参照)。次に、マシンにインストールされているのと同じように、通常どおりフォントを使用します。

PrivateFontCollectionクラスを使用すると、アプリケーションは、フォントのシステムバージョンを置き換えることなく、既存のフォントのプライベートバージョンをインストールできます。たとえば、GDI +は、システムが使用するArialフォントに加えて、Arialフォントのプライベートバージョンを作成できます。 PrivateFontCollectionを使用して、オペレーティングシステムに存在しないフォントをインストールすることもできます。

ソース

26
Adam Hughes

これに関するおそらく30-50の投稿を調べた後、私はついに実際に機能する解決策を思い付くことができました!次の手順を順番に実行してください。

1.)アプリケーションリソースにフォントファイル(私の場合はttfファイル)を含めます。これを行うには、「Resources.resx」ファイルをダブルクリックします。

enter image description here

2。)[リソースの追加]オプションを強調表示して、下矢印をクリックします。 「既存のファイルを追加」オプションを選択します。次に、フォントファイルを検索して選択し、[OK]をクリックします。 「Resources.resx」ファイルを保存します。

enter image description here

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.)次に、フォントをラベルに割り当て、デフォルトのテキストをラベルに追加します。

        //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()メソッド を呼び出すと、Marshal.FreeCoTaskMem(data)を安全に呼び出すこともできます。アプリの存続期間中、わざわざフォントをロードしたままにしないことはかなり一般的です。

7.)アプリケーションを実行します。これで、指定したラベルにカスタムフォントが設定されていることがわかります。

乾杯!

38
Siddhant

解決策は、目的のフォントをアプリケーションに埋め込むことだと思います。

このリンクを試してください:

http://www.emoreau.com/Entries/Articles/2007/10/Embedding-a-font-into-an-application.aspx

5
P.K

使用するフォントを追加します。

enter image description here

`

    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);


    }

enter image description here

3
Reza Taibur