テキストエディター への返答

投稿で使用できる特殊コードの説明。(別タブで開きます。)
本名は入力しないようにしましょう。
投稿した後で削除するときに使うパスワードです。返答があった後は削除できません。
返答する人が目安にします。相手が小学生か社会人かで返答の仕方も変わります。
最初の投稿が質問の場合、質問者が解決時にチェックしてください。(以降も追加書き込み・返信は可能です。)
※「過去ログ」について書くときはその過去ログのURLも書いてください。

以下の返答は逆順(新しい順)に並んでいます。

投稿者 ugonight  (中学生) 投稿日時 2011/12/27 18:03:43
返信遅れちゃいましたすみませんっorz

ご親切にありがとうございます。
頑張ってやってみますっ
投稿者 魔界の仮面弁士  (社会人) 投稿日時 2011/12/6 18:26:01
> 任意の文字を探してその色の文字を変えるというのがわからないんです…
正規表現(Regexクラス)やInStr 関数、あるいは String.IndexOf メソッド等を通じて、
該当する文字列の位置を調査するのが第一段階。

その位置を基に、RichTextBox の Select(start, length) メソッドもしくは
SelectionStart・SelectionLengthプロパティを呼び出して、該当する文字列を
選択状態にするのが第二段階。

最後に第三段階として、SelectionColor プロパティで色を確定させて完成です。


> 着色のタイミングはTextChangedメゾットでOKですかね…
メゾット ではなく
メソッド です。( Method )


> 自動で改行する方法もカーソルを移動する方法もわかんないんです…
上記にも少し書きましたが、カーソル移動は
 ・Select(start, length) メソッド
 ・SelectionStart・SelectionLengthプロパティ
のいずれかを使えば OK です。

長さ指定の方を 0 にすれば、start で指定した位置に入力カーソル(キャレット)が来ますし、
長さも指定すれば、そこから指定した文字数のテキストが選択状態になります。

また、改行については「RichTextBox1.SelectedText = ControlChars.NewLine」とすれば、
現在の位置に改行が埋め込まれます。(文字列を選択していた場合は、それらが改行に置き換わります)

ちなみに SelectedText プロパティとは、現在選択されている文字列を取得したり、
あるいはその選択されていたテキストを別の文字列に置き換えるためのものです。
投稿者 ugonight  (中学生) 投稿日時 2011/12/6 18:06:42
皆さんありがとうございますっ!
実はコード全然書いてないんですね…

選択した文字に色をつけるのは
RichTextBox1.SelectionColor = Color.Blue

とすればいいのはわかるんですが任意の文字を探してその色の文字を変えるというのがわからないんです…

着色のタイミングはTextChangedメゾットでOKですかね…
そこまで急ぎじゃなくてもいいので…

自動で改行する方法もカーソルを移動する方法もわかんないんです…
考え方はわかるんですけど…

実はこのサイトのスクリプトエディターが不便なので、自動的に余白を入れて文型を整えられたりできるプログラムが作りたいんです☟
http://rmake.jp/

いつもコードばっかり要求してしまうのは反省します。
いろいろ調べてもわからなくて…
投稿者 魔界の仮面弁士  (社会人) 投稿日時 2011/12/6 12:15:12
# 回答に非ず。

RichTextBox (COM 版あるいは .NET 版)でエディタ機能を実装されているソフトも
幾つかありますが、その実装は意外と大変だったりします。
http://www.geocities.jp/hatanero/vb.html
http://www.geocities.jp/hatanero/richtextnet1.html

そもそも RichTextBox は、入力中の動的な色付けに対応させにくいコントロールです。
これは色を変える範囲を指定する際に、対象文字列を選択状態にする必要があるためです。

そのため、標準コントロールの利用は諦め、エディタコントロール自体を
自前で一から生成される道を選ぶ猛者もおられます。
http://www.kanazawa-net.ne.jp/~pmansato/net/net_make_texteditor.htm


とはいえ、RichTextBox が全く使えないというわけでもありません。たとえば
表示用の RichTextBox とは別に、RTFコードを生成させるための編集作業用として
非表示の RichTextBox を用意するとか、あるいは RTFコードそのものを直接
自前で構築するなどすれば、ある程度は対処可能です(簡単かどうかは別にして)。

ですが入力中にリアルタイムに色を付けるほどの応答性能を稼ぐとなると、
データが長文になるほど苦労するであろうとは思います。

また、(Word 等でもそうですが)着色した単語のすぐ後から入力すると、
入力した文字の書式が、直前の文字の書式に自動的に引きずられてしまう点も
実装を難しいものにしています。


リアルタイムな着色にそこまで手間をかけたくないような場合には、
Azuki や Footy2 などといった、出来合いのエディタコントロールを
試してみるのも良いかもしれません。
http://www.r-nakai.com/archives/257
http://sgry.jp/pgarticles/cs_editor_component.html
http://d.hatena.ne.jp/gsf_zero1/20080215/p1
投稿者 さなだ丸  (社会人) 投稿日時 2011/12/6 10:35:34
>リッチテキストボックスにIfなどの特定の文字を入力されたときに、その文字だけを青くする
というのなら、
リッチテキストボックスの入力を常に監視して(Change系のイベントとかでチェックするとか)
Ifなどの特定の文字が入力された場合はその文字を青くすればいいのでは?

>改行されたときにその行にifなどの特定の文字が入力されていた場合に自動的に次の行に空白を開けその次の行にendを書き、空白の行の最後にカーソルを戻す

これも、同様のチェックで改行が入った時に、特定の文字をチェックして改行コードとendという文字と課入れるなどすればいいんでないか?
フォーカスを空白行に持ってくるのはちょいと考えないと上手くいかないかもしれないけど。
投稿者 ラオシス  (中学生) 投稿日時 2011/12/5 20:30:57
とりあえずソースぐらいは書いてみましょうか。
丸投げは一番良くありません。ソースを書いてといっても書いてくれる人はあまりいませんよ?
自分で努力してそのあと質問すべきです。

RichTextBoxに関してあまり触ったことがないので何とも言えませんが

部分的に色やフォントなどを変えて,文字列を装飾して表示する(RichTextBoxクラス)
http://itpro.nikkeibp.co.jp/article/COLUMN/20060926/249031/

RichTexBoxについて
http://rucio.cloudapp.net/ThreadDetail.aspx?ThreadId=9997

>あと、改行されたときにその行にifなどの特定の文字が入力されていた場合に自動的に次の行に空白>を開けその次の行にendを書き、空白の行の最後にカーソルを戻す方法があったらそれも教えてくださいorz

つまりVBの
If True Then 'ここで改行する 
'次にここにカーソル 
End If

というような感じですか?
すこし自分の方でもRichTextBoxに関して触ってみたい気になりました

少しだけでもコードを書いて、そこでわからないところがあればまた質問してください^^
投稿者 ugonight  (中学生) 投稿日時 2011/12/5 17:46:43
今、VBのようなエディターを作ってますっ!

もし、リッチテキストボックスにIfなどの特定の文字を入力されたときに、その文字だけを青くする方法を知ってる人がいたら教えてくださいっ!

あと、改行されたときにその行にifなどの特定の文字が入力されていた場合に自動的に次の行に空白を開けその次の行にendを書き、空白の行の最後にカーソルを戻す方法があったらそれも教えてくださいorz