我需要在Windows窗体中创建RichTextBox
,它最多包含18个字符,最多6行。 RichTextBox
的问题是当你写一个很长的单词时,它会显示为两行,但它被视为一行。例如:
这是
supercalifragilist
icexpialidocious
这是一个有两行的文字。
我的第一个方法是创建自己的类,它继承自RichTextBox
并覆盖OnTextChanged
。这很好,但我完全忘记了自动换行。所以我在我的方法中实现了自动换行。
算法非常简单:当文本更改时,将其拆分为“space”和“new line”字符。然后我计算连续输入的字符数,如果有空格,我将它放在这一行。当没有空格的时候,我正在创造新的界限。
令人讨厌的部分:现在它有一些错误,我不知道如何解决。假设用户已经写了18个字符的长字。他在最后一个角色后面有一个光标。现在:
在每个场景中,他将以18个字符长的单词和“新行”字符结束。我不知道如何发现,他想做什么。请记住,用户可以将光标放在任何地方并编辑他之前输入的文本。
我知道我可以创建自定义字符串类(继承自字符串)或保留输入单词列表,但实现这一点会很痛苦,代码将开始变得不可读。
任何想法如何做得更好?
答案 0 :(得分:0)
我明白了。我的另一个想法是使用StringReader
并按字符逐字阅读,但实施起来也非常麻烦和痛苦。
最好的方法是不要更改RichTextBox
的默认行为。我没有拆分文本,我没有检查是否有一个单词的空格。我的RichTextBox
有固定的大小,我很好。行中有18个字符没有问题,但问题在于计算行数,因为它并不像计算新行字符那么简单。
我想改变行为的原因是因为后来我必须逐行发送这个文本。手动计算一行中适合多少个单词并动态创建行似乎很容易,但它是错误的。
RichTextBox
有非常有用的方法GetLineFromCharIndex
。通过将Text.Count()
传递给它,我可以确定我有多少实际行。现在我的代码比以前短两倍,似乎没有更大的错误。逐行发送文本并不是那么容易,因为我需要在读取字符时手动计算我在哪行,但总的来说,它比以前的解决方案更容易接受。