2015年11月28日土曜日

P005-文字を色付きで表示

今日の目標→

文字に色を付けたり、行をスクロールさせるなど、RichTextBoxを使ったテキスト表示のテクニックを探る。

●プロジェクトの作成

  1. 「TextWork2」という名前で、新規プロジェクトを作る
  2. Form1.csのコードを開き、前回(TextWork)のForm1.csのコードをコピペする
  3. コードを次のように修正する。

これも「開始(S)」ボタンで表示が始まり、「停止(E)」ボタンで止まる。見どころは次の3つ。

  • 開始と停止メッセージに色がついている
  • 文字表示が最下部に達するとスクロールする
  • 行数が20行を超えると先頭行から順に消えていく

(実行画面が入る予定)

●文字に色

RichTextBoxで、文字に色を付ける方法は2つある。

(A) すでに表示されている文字の色を変えるには

  1. Select()メソッドで、色を変えたい文字範囲を選択
  2. SelectionColorプロパティで、その範囲の色を設定

(B) これから表示する文字の色を変えるには

  1. Select()メソッドで、テキスト末尾の「長さ0の範囲」を選択
  2. SelectionColorプロパティで、文字色を設定
  3. この状態でAppendText()メソッドを実行すると文字に色がつく

今回はAddText()の定義の中で(B)の方法を使っているので見てみてね。

●余分な行を削除

行の削除にはコツがある。というのも、RichTextBoxの操作は基本的にキャラクタ単位で行うため、行単位の操作は面倒なのだ。そこで次の2つのメソッドの出番となる。

  • GetLineFromCharIndex() -- 文字の位置から行番号を得る
  • GetFirstCharIndexFromLine() -- 行番号からその行の先頭の文字位置を返す

今回はCheckLines()の定義の中でこれらを使っている。

●最下行までスクロール

RichTextBoxにはScrollToCaret()メソッドというものがあって、キャレットが見える位置までウィンドウをスクロールできる。キャレットというのは、文字入力の位置でチカチカ点滅している線のことだ。文字カーソルともいう。

キャレットを移動するには、Select()メソッドで、任意の文字位置に「長さ0の範囲」を指定すればよい。

今回はScrollToEnd()の定義の中でこの方法を使っている。

以上、とても駆け足の説明でした。まあ、詳しいことはコードを読んでください。

●今日から投稿は丑三つ時に

今後の投稿ペースですが、できれば毎日1記事を目指します。 もちろん全部プログラムネタは無理っぽいので、ただの独り言の場合もあります。

投稿時刻はブログの設定で毎回午前2:00に統一しようと思います。あまりバラバラな投稿時刻だと、どんな生活リズムだと思われそうで恥ずかしいから…。

0 件のコメント:

コメントを投稿