DOBON.NET DOBON.NETプログラミング掲示板過去ログ

RichTextBoxで選択文字を編集

環境/言語:[.NET Framework1.1 C#]
分類:[.NET]

いつもお世話になってます。秋です。

RichTextBoxを使ってるんですが、
文字選択の判別で困ってます。

SelectionStartとSelectionLengthで選択されている範囲はわかるんですが、
現在のカーソルがどこにあるかわからないんです。
選択範囲を編集したいのですが、例えば[Shift]+[→]カーソルキーを押したときでも
選択範囲を右に増やせばいいのか、左を減らせばいいのか判別のしようがありません。
カーソルキー入力時にフラグをもたせて無理やり判別する方法も考えたのですが、
例えばマウスで選択した場合などどうにもなりません。

現在のカーソル位置か、
現在位置が選択開始位置と選択終了位置のどちらにあるのか、
がわかれば解決するのですが・・・

よろしくお願いします。
用途が今一つ不明ですが‥‥

 試してみたところ、 EM_GETSEL / EM_EXGETSEL メッセージでは意図する結果を得られませんでしたが、 GetCaretPos API と GetCharIndexFromPosition メソッドを組み合わせて使用することでほぼ期待通りの結果を得ることができました。

 他にも良い方法があるかも知れませんけど、参考まで。



#とは言え、内部でキャレット位置を管理した方が良さそうな気も。
> カーソルキー入力時にフラグをもたせて無理やり判別する方法も考えたのですが、
> 例えばマウスで選択した場合などどうにもなりません。
#マウス操作のときは MouseUp イベントで取得すれば良いのでは?<「例えば」と仰ってる以上、他にも想定されてるケースがあるのでしょうが。
ありがとうございます。
お返事が遅くなってしまい申し訳ありません。

「テキストボックス内の改行位置について」
ttp://dobon.net/cgi-bin/vbbbs/cbbs.cgi?mode=al2&namber=6224&no=0&KLOG=2
のスレでも参考にさせていただきました。
そこでエディタは独自処理などを使わないと…っていう深山さんの書き込みを見たにもかかわらず、C#の勉強がてらにエディタを気長に作ってる次第です(笑

ですので用途…というと、選択範囲を制御すること自体が目的です。
マウス以外にはHOME・ENDキー、CTRL+カーソルキー、上下キー、PageUp・Downキーといったところかと思います。

書き込みを参考にはさせていただいたのですが、
実験する時間がなかなか取れなくて・・・(ーー;

また報告させていただきますね。
■No7736に返信(秋さんの記事)

> また報告させていただきますね。

是非お願いします。楽しみにしています。

DOBON.NET | プログラミング道 | プログラミング掲示板