Home > C# > WPF > WPFコントロール > テキスト編集コントロール > RichTextBox > Code Only > RichTextBoxに、コードから、文書を追加する

WPFのRichTextBoxに、コードから、文書を追加する

新規作成日 2020-02-15
最終更新日

RichTextBoxで扱う文書は、FlowDocument形式であるため、コードからは、文字列をそのまま追加することはできません。文字列をRichTextBoxに追加するには、FlowDocument形式にした上で追加する必要があります。

「RichTextBox クラス」のサンプルコードを参考に、コードをCode Onlyで実行できるように加工しました。

参考

WPFで、UIを作成する際、xaml表記を使用すると簡単に表記できます。しかし、データやユーザー操作によって、プログラムの実行中にUIを操作する際には、コードで操作する必要があります。

RichTextBoxで扱う文書は、FlowDocument形式であるため、直接、文字列をRichTextBoxに追加することはできません。文字列をRunクラスに入れ、RunクラスをParagraphクラスに入れ、ParagraphクラスをRichTextBoxクラスに追加します。

ParagraphクラスをRichTextBoxクラスに追加する場合、ブロック形式で追加する方法と、インライン形式で追加する方法があります。

「RichTextBox クラス」のサンプルコードでは、文字列をブロック形式で追加する方法が紹介されています。

RichTextBox に、文字列をブロック形式で追加する

using System;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Documents;

namespace RichTextBoxCodeOnly
{
    class RichTextBoxCodeOnly : Window
    {
        [STAThread]
        public static void Main()
        {
            Application app = new Application();
            app.Run(new RichTextBoxCodeOnly());
        }
        public RichTextBoxCodeOnly()
        {
            StackPanel myStackPanel = new StackPanel();

            // ウィンドウの大きさを設定する
            Width = 200;
            Height = 120;

            // RichTextBoxのために、内容が含まれるFlowDocumentを作成します。
            FlowDocument myFlowDoc = new FlowDocument();

            // 段落をFlowDocumentに追加します。
            myFlowDoc.Blocks.Add(new Paragraph(new Run("Paragraph 1")));
                myFlowDoc.Blocks.Add(new Paragraph(new Run("Paragraph 2")));
                myFlowDoc.Blocks.Add(new Paragraph(new Run("Paragraph 3")));
                RichTextBox myRichTextBox = new RichTextBox();

            // 最初の内容をRichTextBoxに追加します。
            myRichTextBox.Document = myFlowDoc;
            
                myStackPanel.Children.Add(myRichTextBox);
                this.Content = myStackPanel;
        }
    }
}

実行結果

文字列をRichTextBoxクラスにインライン形式で追加する

RichTextBox に、文字列をインライン形式で追加する

「RichTextBox の概要」のサンプルコードでは、文字列をインライン形式で追加する方法が紹介されています。

フロー文書の最上位は、ブロック形式の要素の必要があります。

using System;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Documents;

namespace RichTextBoxOverviewCodeOnly
{
    class RichTextBoxOverviewCodeOnly : Window
    {
        [STAThread]
        public static void Main()
        {
            Application app = new Application();
            app.Run(new RichTextBoxOverviewCodeOnly());
        }
        public RichTextBoxOverviewCodeOnly()
        {
            StackPanel myStackPanel = new StackPanel();

            // ウィンドウの大きさを設定する
            Width = 250;
            Height = 80;

            // RichTextBoxのために、内容が含まれるFlowDocumentを作成します。
            FlowDocument myFlowDoc = new FlowDocument();

            // プレーンテキストといくつかの太字のテキストのRunを作成します。
            Run myRun = new Run("This is flow content and you can ");
            Bold myBold = new Bold(new Run("edit me!"));

            // 段落を作成して、それにRunとBoldを追加します。
            Paragraph myParagraph = new Paragraph();
            myParagraph.Inlines.Add(myRun);
            myParagraph.Inlines.Add(myBold);

            // 段落をFlowDocumentに追加します。
            myFlowDoc.Blocks.Add(myParagraph);

            RichTextBox myRichTextBox = new RichTextBox();

            // 最初の内容をRichTextBoxに追加します。
            myRichTextBox.Document = myFlowDoc;

            myStackPanel.Children.Add(myRichTextBox);
            this.Content = myStackPanel;
        }
    }
}

実行結果

文字列をRichTextBoxクラスにブロック形式で追加する

ほぼ同じ例です。

using System;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Documents;

namespace RichTextBoxBlocks
{
    class RichTextBoxBlocks : Window
    {
        [STAThread]
        public static void Main()
        {
            Application app = new Application();
            app.Run(new RichTextBoxBlocks());
        }
        public RichTextBoxBlocks()
        {
            // スタックパネルを作成する
            StackPanel myStackPanel = new StackPanel();

            // ウィンドウの大きさを設定する
            Width = 200;
            Height = 120;

            // VerticalScrollBarVisibilityプロパティをAutoに設定して、新しいRichTextBoxを作成します。
            RichTextBox rtb = new RichTextBox();
            rtb.VerticalScrollBarVisibility = ScrollBarVisibility.Auto;


            // プレーンテキストといくつかの太字のテキストのRunを作成します。
            Run myRun1 = new Run();
            myRun1.Text = "A RichTextBox with ";
            Bold myBold = new Bold();
            myBold.Inlines.Add("initial content ");
            Run myRun2 = new Run();
            myRun2.Text = "in it.";

            // 段落を作成して、それにRunとBoldを追加します。
            Paragraph myParagraph = new Paragraph();
            myParagraph.Inlines.Add(myRun1);
            myParagraph.Inlines.Add(myBold);
            myParagraph.Inlines.Add(myRun2);

            // 新しいFlowDocumentを作成し、3つの段落を追加します。
            FlowDocument flowDoc = new FlowDocument();

            // 段落をFlowDocumentに追加します。
            flowDoc.Blocks.Add(myParagraph);

            // フロー文書をRichTextBoxの文書に設定する
            rtb.Document = flowDoc;
            
            // スタックパネルに、RichTextBoxを格納する
            myStackPanel.Children.Add(rtb);
            this.Content = myStackPanel;
        }
    }
}

実行結果

文書の入力されたRichTextBox
このエントリーをはてなブックマークに追加

Home PC C# Illustration

Copyright (C) 2011 Horio Kazuhiko(kukekko) All Rights Reserved.
kukekko@gmail.com
ご連絡の際は、お問い合わせページのURLの明記をお願いします。
「掲載内容は私自身の見解であり、所属する組織を代表するものではありません。」