search
LoginSignup
4

More than 3 years have passed since last update.

posted at

updated at

[C#] リッチテキストボックス

リッチテキストボックスの忘備録になります。

1. デザイン

フォームを用意して、ツールボックスから ToolStrip と RichTextBox を貼り付けます。

image.png

1)ToolStripButton

ToolStrip に、適当にイメージを用意して、ToolStripButton に貼り付けます。

今回は、下記のボタンを用意しました。

参考:メニューにアイコンを表示する

フォント修飾

  • フォントダイアログボックス呼び出しボタン
  • フォントを大きくするボタン
  • フォントを小さくするボタン
  • フォントを太字にするボタン
  • フォントを斜字にするボタン
  • テキストに下線を引くボタン
  • テキストに取り消し線を引くボタン

テキストレイアウト

  • 左寄せボタン
  • 中央寄せボタン
  • 右寄せボタン

段落

  • 箇条書きボタン
  • 右インデントボタン
  • 左インデントボタン

その他

その他として、Undo/Redo、Copy/Cut/Paste などあると便利だと思いますが、個人的にはデフォルトのショートカットキーで実現できる機能はボタンとしては不要だと思っています。

右クリックからの context メニューは、あった方が便利だと思います。(ここでは割愛していますが)

2)イメージサイズ

ToolStripButton に貼り付けたイメージが大きくなる時は、プロパティの [ImageScaling] を [None] にします。

3)イメージ+テキスト

ToolStripButton に貼り付けたイメージの隣にテキストを入れたい時は、プロパティの [DisplayStyle] を [ImageAndText] にして、[Text] に文字を入れます。

無題.png

2. 実現方法

実現方法の概要は、下記のとおりです。
[()内はサンプルコードの変数]

1)フォント修飾

フォントダイアログボックス呼び出しボタン

FontDialog インスタンス (fontDialog1) を生成し、必要に応じて初期値を設定してから、フォントダイアログを表示します。
フォントダイアログで [OK] ボタンが押されたら、リッチテキストボックスの SelectionFont (richTextBox1.SelectionFont) にフォントを設定します。
フォントの色は、SelectionColor (richTextBox1.SelectionColor) に設定します。

参考:RichTextBoxで文字列の色とフォントを変更する

フォントを大きくする/小さくするボタン

フォントサイズを大きくするには、リッチテキストボックスの現在のフォントサイズ (richTextBox1.SelectionFont.Size) を取得し、フォントサイズを一回り大きくしてセットします。

逆にフォントサイズを小さくするには、フォントサイズを一回り小さくしてセットします。

参考:Font.SizeInPoints プロパティ

フォントを太字/斜字にするボタン、テキストに下線/取り消し線を引くボタン

リッチテキストボックスの SelectionFont の Style (richTextBox1.SelectionFont.Style) に、FontStyle.Bold, Italic, Underline, Strikeout を設定することで実現します。

参考:fontを設定する 斜体 太字 取り消し線 下線

2)テキストレイアウト

左寄せ/中央寄せ/右寄せボタン

リッチテキストボックスの SelectionAlignment (richTextBox1.SelectionAlignment) に、HorizontalAlignment.Left, Center, Right を設定することで実現します。

3)段落

箇条書きボタン

リッチテキストボックスの SelectionBullet (richTextBox1.SelectionBullet) に、true/false を設定することで実現します。

右/左インデントボタン

リッチテキストボックスの SelectionIndent (richTextBox1.SelectionIndent) に、インデント位置を設定することで実現します。

3. サンプルコード

form1.cs
using System;
using System.Drawing;
using System.Windows.Forms;

namespace WindowsFormsApp6
{
    public partial class Form1 : Form
    {
        FontDialog fontDialog1 { get; set; } = new FontDialog();

        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            // 必要に応じて初期値を設定

            //初期のフォントを設定
            fontDialog1.Font = richTextBox1.Font;
            // 初期の色を設定
            fontDialog1.Color = richTextBox1.ForeColor;
            // ユーザーが選択できるポイントサイズの最大値を設定する
            fontDialog1.MaxSize = 15;
            fontDialog1.MinSize = 10;
            // 存在しないフォントやスタイルをユーザーが選択すると
            // エラーメッセージを表示する
            fontDialog1.FontMustExist = true;
            // 横書きフォントだけを表示する
            fontDialog1.AllowVerticalFonts = false;
            // 色を選択できるようにする
            fontDialog1.ShowColor = true;
            // 取り消し線、下線、テキストの色などのオプションを指定可能にする
            // デフォルトがTrueのため必要はない
            fontDialog1.ShowEffects = true;
            // 固定ピッチフォント以外も表示する
            // デフォルトがFalseのため必要はない
            fontDialog1.FixedPitchOnly = false;
            // ベクタ フォントを選択できるようにする
            // デフォルトがTrueのため必要はない
            fontDialog1.AllowVectorFonts = true;
        }

        // フォントダイアログボックス呼び出しボタン
        private void tsbFontSetting_Click(object sender, EventArgs e)
        {
            if (fontDialog1.ShowDialog() == DialogResult.OK)
            {
                //OKボタンが押されたら、フォントを設定する
                richTextBox1.SelectionFont = fontDialog1.Font;
                richTextBox1.SelectionColor = fontDialog1.Color;
            }
        }

        // フォントを大きくするボタン
        private void tsbIncreaseFontSize_Click(object sender, EventArgs e)
        {
            var currentSize = richTextBox1.SelectionFont.Size;
            currentSize += 2.0F;
            richTextBox1.SelectionFont = new Font(
                richTextBox1.SelectionFont.Name,
                currentSize,
                richTextBox1.SelectionFont.Style,
                richTextBox1.SelectionFont.Unit);
        }

        // フォントを小さくするボタン
        private void tsbDecreaseFontSize_Click(object sender, EventArgs e)
        {
            var currentSize = richTextBox1.SelectionFont.Size;
            currentSize -= 1;
            richTextBox1.SelectionFont = new Font(
                richTextBox1.SelectionFont.Name,
                currentSize,
                richTextBox1.SelectionFont.Style);
        }

        // フォントを太字にするボタン
        private void tsbBold_Click(object sender, EventArgs e)
        {
            richTextBox1.SelectionFont = new Font(richTextBox1.SelectionFont.FontFamily,
                richTextBox1.SelectionFont.Size,
                richTextBox1.SelectionFont.Style ^ FontStyle.Bold);
        }

        // フォントを斜字にするボタン
        private void tsbItalic_Click(object sender, EventArgs e)
        {
            richTextBox1.SelectionFont = new Font(richTextBox1.SelectionFont.FontFamily,
                richTextBox1.SelectionFont.Size,
                richTextBox1.SelectionFont.Style ^ FontStyle.Italic);
        }

        // テキストに下線を引くボタン
        private void tsbUnderline_Click(object sender, EventArgs e)
        {
            richTextBox1.SelectionFont = new Font(richTextBox1.SelectionFont.FontFamily,
                richTextBox1.SelectionFont.Size,
                richTextBox1.SelectionFont.Style ^ FontStyle.Underline);
        }

        // テキストに取り消し線を付けるボタン
        private void tsbStrikeout_Click(object sender, EventArgs e)
        {
            richTextBox1.SelectionFont = new Font(richTextBox1.SelectionFont.FontFamily,
                richTextBox1.SelectionFont.Size,
                richTextBox1.SelectionFont.Style ^ FontStyle.Strikeout);
        }

        // 左寄せボタン
        private void tsbTextLeft_Click(object sender, EventArgs e)
        {
            richTextBox1.SelectionAlignment = HorizontalAlignment.Left;
        }

        // 中央寄せボタン
        private void tsbTextCenter_Click(object sender, EventArgs e)
        {
            richTextBox1.SelectionAlignment = HorizontalAlignment.Center;
        }

        // 右寄せボタン
        private void tsbTextRight_Click(object sender, EventArgs e)
        {
            richTextBox1.SelectionAlignment = HorizontalAlignment.Right;
        }

        // 箇条書きボタン
        private void tsbBullet_Click(object sender, EventArgs e)
        {
            richTextBox1.SelectionBullet = !richTextBox1.SelectionBullet;
        }

        // 右インデントボタン
        private void tsbIndent_Click(object sender, EventArgs e)
        {
            richTextBox1.SelectionIndent += 16;
        }

        // 左インデントボタン
        private void tsbOutdent_Click(object sender, EventArgs e)
        {
            richTextBox1.SelectionIndent -= 16;
        }
    }
}

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
What you can do with signing up
4