Windows フォームで作成する必要がありますRichTextBox
。これは、1 行に最大 18 文字、最大 6 行です。問題RichTextBox
は、非常に長い単語を記述すると、2 行に表示されるのに 1 行のように扱われることです。例えば:
これは
スーパー
カリフラジリストのicexpialidociousです
これは 2 行のテキストです。
私の最初のアプローチは、から継承しRichTextBox
、オーバーライドする独自のクラスを作成することでしたOnTextChanged
。うまくできましたが、ワードラップを完全に忘れていました。そこで、私は自分のアプローチでワードラッピングを実装しました。
アルゴリズムは非常に単純です。テキストが変更されると、「スペース」と「改行」文字で分割されます。次に、何文字が連続して入力されたかを数え、単語のスペースがあれば、この行に配置します。単語のスペースがない場合は、新しい行を作成しています。
そして厄介な部分:解決方法がわからないバグがいくつかあります。ユーザーが 18 文字の長さの単語を書いたとします。彼は最後の文字の後にカーソルを持っています。そしていま:
- Return キーを押すと、手動で改行文字を作成できます。改行文字は常にこの場所にあるはずです。
- 彼はスペースを押して新しい単語を書き始めることができます。
- 彼はこの単語に他の文字を書き続けることができます。
各シナリオで、彼は 18 文字の長さの単語と「改行」文字で終わることになります。彼が何をしたかったのか、私はどのように検出するのかわかりません。また、ユーザーはどこにでもカーソルを置いて、以前に入力したテキストを編集できることに注意してください。
カスタム文字列クラス (文字列から継承) を作成したり、入力した単語のリストを保持したりできることはわかっていますが、これを実装するのは面倒で、コードが判読できなくなります。
これをより良くする方法はありますか?