mikeo_410


 RichTextBox

  HTMLエディタで、ソース編集を指定すると、HTML記述のソースを RichTextBox に表示しています。
  RichTextBox は、文字を修飾出来る点にメリットがあるのでしょうが、今回は単なるメモ帳のような表示です。また、編集操作も RichTextBox が自律的に行うのでプログラミングの余地はあまりありません。
  今回の処理はキャレット位置の取得と文字列の挿入です。

1.インテリセンスのようにキー操作で開くPopupウインドウ

  今回は、タグを入力補完するので、'<'キーが押されたらPopupメニューが開きます。この、Popupメニューを開く位置を知る方法です。

  rb.CaretPosition.GetCharacterRect(LogicalDirection.Forward);

  rb は RichTextBox で、取得した矩形の左下隅をPopupメニューの表示位置にしました。

2.間接的に文字入力

  入力補完のためのPopupメニューが表示されたら、フォーカスはPopupメニュー上の ListBox に移します。これで、UP、DOWNキーで文字列を選べます。
  この状態で、キー入力は ListBox がまず第一に受け取っているわけです。
  入力する文字列の選択が完了するまでの入力は、ここから間接的に RichTextBox に反映することになります。

2.1.PopupウインドウのOnPreviewTextInput() をオーバライド

  OnPreviewTextInput()は、ListBox で処理する、UP、DOWNキーなどは通らないようです。ここで、文字を判断して処理します。

  1. 制御文字でなければ、RichTextBox に表示します。
    rb.Selection.Text += e.Text;
  2. '\b'が入力されたら、RichTextBoxの1文字抹消を行います。
    rb.CaretPosition.DeleteTextInRun(-1);
  3. 改行など入力確定なら、その文字列を RichTextBox に表示し、Popupメニューを閉じます。
  4. それ以外の文字なら、Popupメニューを閉じます。

  これ以外に、入力に応じて、先頭が一致する選択肢を自動選択し、ListBoxを更新しています。

3.Popupウインドウを閉じるとき

  タグ文字列を選択するなどして、Popupウインドウが閉じたとき、RichTextBox では、入力した文字列が選択状態になっていました。これをPopupウインドウの終了で解除しました。

  this.IsOpen = false;//Popupを閉じる
  owner.Focus();      //RichTextBoxにフォーカスを戻す
  //これをしないとテキストが選択状態の表示になる
  rb.Selection.Select(owner.Selection.End, owner.Selection.End);


川崎市 不動産 ランドセル 朝霞市 不動産 生前贈与 足立区 不動産