フォントダイアログ(FontDialog)を使ってみる

2023年2月7日

今回は、フォントをユーザーに指定して頂くためにフォントダイアログを使うやり方を説明していきたいと思います。

FontDialogを表示するのに必要な参照

FontDialogを利用する場合は、プロジェクトが以下のアセンブリを参照しているか確認してください。

  • System.Windows.Forms

フォーム(Windows フォーム)をプロジェクトに含んでいる場合は、自動で参照されると思われますが、クラスでプロジェクトを作成した場合、参照されていませんので、手動で参照する必要があります。

FontDialogの呼び出し

まずはソースコードを表示します。とりあえずできればいいと思う方であれば以下のコードをコピーして頂ければ利用できるかと思います。

using (FontDialog dlg = new FontDialog())
{
    //表示初期フォントの設定
    dlg.Font = this.label1.Font;

    if (dlg.ShowDialog() != DialogResult.OK)
    {
        //OK以外(この場合キャンセル)がクリックされた場合、何も処理せず抜ける
        return;
    }

    this.label1.Font = dlg.Font;

}

実行してみると以下のようにカラーダイアログが取得され、デフォルトフォントとしてラベルのフォントが選択されています。

各種パラメータ

FontDialogの各種パラメータをTipsでいくつか紹介します。パラメータの設定はShowDialogメソッドの前に呼び出します。

色を選択をできるようにする

色の選択をできるようにします。デフォルトではfalseになっています。

dlg.ShowColor = true;

注意点としてFontクラスは色を持っていないので色を取得する場合は、別途取得する必要があります
例としてlabel1のフォントと色を変更するようにしてみます。

using (FontDialog dlg = new FontDialog())
{
    //表示初期フォント/色の設定
    dlg.Font = this.label1.Font;
    dlg.Color = this.label1.ForeColor;

    // 色を選択できるようにする (初期値 false) → Fontには含まれないので別途取得が必要
    dlg.ShowColor = true;

    if (dlg.ShowDialog() != DialogResult.OK)
    {
        //OK以外(この場合キャンセル)がクリックされた場合、何も処理せず抜ける
        return;
    }
    
    //labelのフォントと文字色をセット
    this.label1.Font = dlg.Font;
    this.label1.ForeColor = dlg.Color;

}

オプション欄(取り消し線、下線、色)の非表示

デフォルトで表示されている文字飾りのグループを非表示にします。

// 取消線、下線、テキストの色などのオプション欄の表示 (初期値 true)
dlg.ShowEffects = false;

ヘルプボタンを表示する

FontDialogにヘルプボタンを表示します。

// [ヘルプ] ボタンの表示/非表示 (初期値 false)
dlg.ShowHelp = true;

ただし、これだけではボタンがでるだけでクリックしても何も起きないのでヘルプボタンを押したときに処理を実行するための例を表示します。

private void button3_Click(object sender, EventArgs e)
{
    using (FontDialog dlg = new FontDialog())
    {
        //表示初期フォントの設定
        dlg.Font = this.label1.Font;

        // [ヘルプ] ボタンの表示/非表示 (初期値 false)
        dlg.ShowHelp = true;

        // [ヘルプ] ボタンが押されたときの処理をセットする
        dlg.HelpRequest += Help_Clicked;

        if (dlg.ShowDialog() != DialogResult.OK)
        {
            //OK以外(この場合キャンセル)がクリックされた場合、何も処理せず抜ける
            return;
        }

        this.label1.Font = dlg.Font;

    }
}
private void Help_Clicked(object sender, EventArgs e)
{
    MessageBox.Show("Helpボタンが押されました。");
}

クリックのイベント関数を作成し、FontDialogにデリゲート(委任)します。

適用ボタンを表示する

FontDialogに適用ボタンを表示します。

// [適用] ボタンの表示/非表示 (初期値 false)
dlg.ShowApply = true;

ただし、これだけではボタンがでるだけでクリックしても何も起きないので適用ボタンを押したときに処理を実行するための例を表示します。

private void button3_Click(object sender, EventArgs e)
{
    using (FontDialog dlg = new FontDialog())
    {
        //表示初期フォントの設定
        dlg.Font = this.label1.Font;

        // [適用] ボタンの表示/非表示 (初期値 false)
        dlg.ShowApply = true;

        // [ヘルプ] ボタンが押されたときの処理をセットする
        dlg.Apply += Apply_Clicked;

        if (dlg.ShowDialog() != DialogResult.OK)
        {
            //OK以外(この場合キャンセル)がクリックされた場合、何も処理せず抜ける
            return;
        }

        this.label1.Font = dlg.Font;

    }
}
private void Apply_Clicked(object sender, EventArgs e)
{
    //ダイアログを取得
    FontDialog dlg = (FontDialog)sender;

    //選択されているフォントを表示
    MessageBox.Show(string.Format("適用されたFontは{0}です。", dlg.Font.FontFamily.ToString()));
}

注意したいところは、適用ボタンを押した時点で「dlg.Font」には選択したFontが入っています。
もしキャンセル時に元のフォントに戻したい場合は、ダイアログ表示前にFontを避けておく必要があります。

等幅フォントのみ表示する

FontDialogに表示されるフォントを等幅フォントのみにします。

// 等幅フォントだけを表示する (初期値 false)
dlg.FixedPitchOnly = true;

Fontには「等幅フォント」と「プロポーショナルフォント」があります。

「等幅フォント」はすべての文字の幅が同じになっているもので、「プロポーショナルフォント」は文字ごとに幅が違うものです。

等幅フォントの「MS ゴシック」とプロポーショナルフォントの「MS Pゴシック」を比べてみるとわかります。

ソースコードなんかは等幅フォントの方が見やすいと思います。
もしコードエディタとかを自作していてフォントダイアログを表示するときに等幅フォントだけにしたいっていう場合はこのオプションをtrueにしておくといいと思います。

まとめ

フォントダイアログの説明をしました。

あまりフォントダイアログを利用する機会というのは、私はなかったのですが試してみたくて記事にしました。

ここまで読んで頂いてありがとうございます。

C#

Posted by nomux2