2019-10-25に更新

リッチ・テキスト・ボックスって何だぜ☆(^~^)?

関連記事| WPFって何なんだぜ☆(^~^)?

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 フォームの初期化のイベントハンドラーを使うには
↓MainWindow とかいてあるところをクリックして Loaded をダブルクリックすればいいのかだぜ☆?」

20191024wpf20b1.png

KIFUWARABE_80x100x8_01_Futu.gif
「 知らね☆」

RichTextBox Overview

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑リッチ・テキスト・ボックスのAPIが さっぱり 見たことのない体系だぜ☆」

OKAZAKI_Yumemi_80x80x8_02_Syaberu.gif
「 まだ使う気なのね」

        private void Window_Loaded(object sender, RoutedEventArgs e)
        {
            StackPanel myStackPanel = new StackPanel();

            // Create a FlowDocument to contain content for the RichTextBox.
            FlowDocument myFlowDoc = new FlowDocument();

            // Create a Run of plain text and some bold text.
            Run myRun = new Run("This is flow content and you can ");
            Bold myBold = new Bold(new Run("edit me!"));

            // Create a paragraph and add the Run and Bold to it.
            Paragraph myParagraph = new Paragraph();
            myParagraph.Inlines.Add(myRun);
            myParagraph.Inlines.Add(myBold);

            // Add the paragraph to the FlowDocument.
            myFlowDoc.Blocks.Add(myParagraph);

            // Add initial content to the RichTextBox.
            richTextBox.Document = myFlowDoc;

            // すでに接続済み。何のこっちゃ☆(^~^)
            // myStackPanel.Children.Add(richTextBox);
            // this.Content = myStackPanel;
        }

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑適当にサンプル・プログラムを丸コピーしてみよう☆」

20191024wpf21.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑太字も出せるテキスト・ボックスの出来上がりだぜ☆」

OKAZAKI_Yumemi_80x80x8_02_Syaberu.gif
「 プログラムが何やってるか分からないんだけど?」

            Run myRun = new Run("This is flow content and you can ");
            Bold myBold = new Bold(new Run("edit me!"));

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑Run がプレーンなテキストで、Bold でラッピングすると太字になるみたいだな☆」

OKAZAKI_Yumemi_80x80x8_02_Syaberu.gif
「 なんで プレーンなテキストは Run なの? なんで HTML の Spanタグ に合わせないの?」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 さあ……☆」

            Paragraph myParagraph = new Paragraph();
            myParagraph.Inlines.Add(myRun);
            myParagraph.Inlines.Add(myBold);

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑Paragraphというのは段落だな☆ Inlinesというのは長方形じゃなくて画面端で改行する直線みたいなやつだろ☆
そこにRunを Add していけばいいみたいだぜ☆」

            FlowDocument myFlowDoc = new FlowDocument();
            myFlowDoc.Blocks.Add(myParagraph);

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑Documentというのは文書全体のことだな☆ Blocksというのは長方形か何かだろ☆ そこにParagraphを追加しようぜ☆?」

            richTextBox.Document = myFlowDoc;

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑そのDocumentを RichTextBox にセットしろだぜ☆」

        private void Window_Loaded(object sender, RoutedEventArgs e)
        {
            // Create a FlowDocument to contain content for the RichTextBox.
            FlowDocument myFlowDoc = new FlowDocument();
            {
                // Create a paragraph and add the Run and Bold to it.
                Paragraph myParagraph = new Paragraph();
                {
                    // Create a Run of plain text and some bold text.
                    Run myRun = new Run("This is flow content and you can ");
                    Bold myBold = new Bold(new Run("edit me!"));

                    myParagraph.Inlines.Add(myRun);
                    myParagraph.Inlines.Add(myBold);
                }

                // Add the paragraph to the FlowDocument.
                myFlowDoc.Blocks.Add(myParagraph);
            }

            // Add initial content to the RichTextBox.
            richTextBox.Document = myFlowDoc;
        }

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑インデントを考慮して こう書くと見やすいだろ☆」

KIFUWARABE_80x100x8_01_Futu.gif
「 じゃあ Bold 以外のスタイルを全部教えろだぜ☆」

System.Windows.Documents Namespace

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑この名前空間から探せばいいと思うんだが、画像が欲しいんだぜ☆」

Style

20191024wpf22.png

                    var hyperl = new Hyperlink(new Run("Link Text."));
                    hyperl.NavigateUri = new Uri("http://search.msn.com");
                    myParagraph.Inlines.Add(hyperl);

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑ハイパーリンクは有名だろ☆ 使ってみようぜ☆?
あれ☆? ハイパーテキスト みたいな見た目をしているが クリックしても ブラウザが出てくるわけでもない……☆
なんかもっと設定がいるのか……☆」

Italic

20191024wpf23.png

                    var myItalic = new Italic(new Run("Italic"));
                    myParagraph.Inlines.Add(myItalic);

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑イタリックも超有名だよな☆」

LineBreak

20191024wpf24.png

                    myParagraph.Inlines.Add(new LineBreak());

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑よし、改行も入れれるぜ☆」

Underline

20191024wpf25.png

                    var underline = new Underline(new Run("Hello!"));
                    myParagraph.Inlines.Add(underline);

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑下線も入れれるぜ☆」

KIFUWARABE_80x100x8_01_Futu.gif
「 赤い波線にしてくれだぜ☆」

wpf – FlowDocument内の波状の下線
Painting with Images, Drawings, and Visuals

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑分からんかった☆」

Highlight

20191024wpf26.png

                    var highlight = new Run("Good morning!");
                    highlight.Foreground = Brushes.White;
                    highlight.Background = Brushes.Blue;
                    myParagraph.Inlines.Add(highlight);

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑色を変えるだけなら ブラシを設定するだけだぜ☆
選択範囲の機能が欲しいなら Selection か何かを使うんだろ☆」

Large

20191024wpf27.png

                    var large = new Run("Yes.");
                    large.FontSize += 8.0;
                    myParagraph.Inlines.Add(large);

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑フォント・サイズは単位が分からんよなあ☆」

操作

全文取得

OKAZAKI_Yumemi_80x80x8_02_Syaberu.gif
「 ?
リッチ・テキスト・ボックスには .Text プロパティが無いんだけど?
テキストの全文って どうやって 引っこ抜くの?」

RichTextBox (WPF) does not have string property “Text”

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 昔のWindowsアプリは マウス操作のようにして ウィジェットからプロパティを取れだぜ☆
↓例えば マウスで先頭から最後尾まで引っ張ると 文字を取れる☆」

                string plainText = new TextRange(richTextBox.Document.ContentStart, richTextBox.Document.ContentEnd).Text;
                Trace.WriteLine(plainText);

等幅(とうふく)フォント指定

20191024wpf28.png

OKAZAKI_Yumemi_80x80x8_02_Syaberu.gif
「 ↑方眼紙に入れたように 文字の桁を揃えたいんだけど どうやんの?」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 むしろ MS-DOS の頃は全部 きれいな 等幅(とうふく)フォントだったんだけどな☆
現代では 良い方法は無くなってしまったが、 MS ゴシック は 等幅になってくれる時期がある☆
勝手に Microsoft に更新されて 空白がずれる時期もあるが……☆」

20191024wpf29.png

            // なるべく等幅なフォント指定
            richTextBox.FontFamily = new FontFamily("MS ゴシック");

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 ↑今はうまいこと いったな☆」

リサイズ

20191025wpf34.png

KIFUWARABE_80x100x8_01_Futu.gif
「 何だぜ、ウィンドウを広げたら リッチ・テキスト・ボックス は自動的にリサイズしてくれるんじゃ ないのかだぜ☆?」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 どうやったら ドッキング できるんだろうな☆?」

20191025wpf35b1.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 クリックしたら クリップみたいなマークが くっついた……☆」

20191025wpf36.png

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 これで枠と くっつく のかだぜ☆ ボタンにも設定しないといけないな☆」

あとがき

OKAZAKI_Yumemi_80x80x8_02_Syaberu.gif
「 テキストを パースして こんなタグやらDOMみたいなのを いちいち設定していくの?」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu.gif
「 そうなんじゃないか☆?」

OKAZAKI_Yumemi_80x80x8_02_Syaberu.gif
「 重そうだなあ」

<書きかけ>

ツイッターでシェア
みんなに共有、忘れないようにメモ

むずでょ

光速のアカウント凍結されちゃったんで……。ゲームプログラムを独習中なんだぜ☆電王戦IIに出た棋士もコンピューターもみんな好きだぜ☆▲(パソコン将棋)WCSC29一次予選36位、SDT5予選42位▲(パソコン囲碁)AI竜星戦予選16位

Crieitは誰でも投稿できるサービスです。 是非記事の投稿をお願いします。どんな軽い内容でも投稿できます。

また、「こんな記事が読みたいけど見つからない!」という方は是非記事投稿リクエストボードへ!

有料記事を販売できるようになりました!

こじんまりと作業ログやメモ、進捗を書き残しておきたい方はボード機能をご利用ください。
ボードとは?

コメント