0

WinFormsRichTextBoxの動作に頭を悩ませようとしています。

RichTextBoxを使用していて、RichTextBoxの右端を選択する場合は、Shiftキーを押しながら右に押すと、右側に追加の文字を選択できます。

本当に頭がおかしいのは、RichTextBoxのSelectionLengthプロパティが0であるということです。視覚的に見ると、現在のテキストの末尾から始まる1文字の長さの選択があるように見えます。curSelStartプロパティとcurSelEndプロパティを見ると、curSelStartはTextプロパティの最後から始まり、curSelEndはそれを1文字超えています。

Winforms RichTextBoxの独自のサブクラスを使用しており、あらゆる種類の特別な動作が実装されています。その中で、SelectionLengthが0のバックスペースを押すと、文字が消去されると想定しています。この場合、バックスペースを押すと現在の選択範囲が消去されるため、この仮定はもはや当てはまりません。

なぜそれがこのように振る舞うのかについてのアイデアはありますか?それを回避する方法はありますか?

4

1 に答える 1

0

この動作は、MultiLineを有効にしてカスタムRichTextBoxコントロールを使い始めたときに問題を引き起こし始めました。したがって、これは私が観察した奇妙な振る舞いから私が解決しなければならないバグにアップグレードされました。

RichTextBoxが改行を処理する方法に癖があるようです。各行の終わりには、常に'\n'文字があります。それが、上記の質問で説明した謎のキャラクターです。削除しようとすると、すぐに再読み込みされます。

この知識があれば、プロパティSelectedTextが'\n'文字で終わっているかどうかを確認できます。挿入した新しいテキストに'\n'が含まれていない場合は、オフセットに文字を追加する必要があります。カスタムコントロールが必要です。

以前に「\n」に気づかなかったなんて信じられません。まあ..問題は今解決されました。

于 2013-03-22T13:28:00.427 に答える