我需要在Windows窗体中创建RichTextBox
,该窗体将连续最多18个字符,最多6行。 RichTextBox
的问题是当您写很长的单词时,它显示为两行,但将其视为一行。例如:
这是超能力主义者icexpialidocious
这是两行文字。
我的第一个方法是创建自己的类,该类继承自RichTextBox
并覆盖OnTextChanged
。做得很好,但是我完全忘记了自动换行。因此,我在自己的方法中实现了自动换行。
算法非常简单:当文本更改时,请按'空格'和'换行'字符进行分割。然后,我计算在一行中输入了多少个字符,如果有空格,我将其放置在这一行中。如果没有文字空间,我将创建新行。
还有令人讨厌的部分:现在有一些错误,我不知道该如何解决。假设用户写了18个字符的长单词。他在最后一个字符之后有一个光标。现在:
在每种情况下,他都会以18个字符的长字和'换行'字符结尾。我不知道该怎么检测,他想做什么。并且请记住,用户可以将光标放置在任何地方并编辑他之前输入的文本。
我知道我可以创建自定义字符串类(从字符串继承)或保留输入单词的列表,但是实现此操作将很痛苦,并且代码将开始变得不可读。
任何想法如何更好地做到这一点?
我知道了。我的另一个想法是使用StringReader
并逐字符读取全文,但是实现起来也很麻烦而且很麻烦。
最佳方法是不更改RichTextBox
的默认行为。我没有分割文本,也没有检查行中是否有空格。我的RichTextBox
大小固定,我可以接受。行中的18个字符没有问题,但是问题在于计数行,因为它不像计数换行符那样简单。
之所以要更改行为,是因为以后我必须逐行发送此文本。手动计算一行中可以容纳多少个单词并动态创建行似乎很容易,但这很容易出错。
RichTextBox
具有非常有用的方法GetLineFromCharIndex
。通过将Text.Count()
传递给它,我可以确定我实际有多少行。现在,我的代码比以前短了两倍,而且似乎没有更大的错误。逐行发送文本并非易事,因为在读取字符时,我需要手动计算我所在的行,但总的来说,比以前的解决方案更容易接受。