1

我需要RichTextBox在 Windows 窗体中创建,它最多可以有 18 个字符,最多 6 行。问题RichTextBox是当你写很长的单词时,它显示为两行,但它被视为一行。例如:

这是
supercalifragilist
icexpialidocious

这是一个有两行的文本。

我的第一种方法是创建自己的类,该类继承自RichTextBox并覆盖OnTextChanged。做得很好,但我完全忘记了自动换行。所以我在我的方法中实现了自动换行。

算法非常简单:当文本发生变化时,用“空格”和“换行”字符分割它。然后我计算一行输入了多少个字符,如果有单词空间,我把它放在这一行。当没有单词空间时,我正在创建新行。

烦人的部分:现在它有一些错误,我不知道如何解决。假设用户写了 18 个字符长的单词。他在最后一个字符后有一个光标。现在:

  1. 他可以按回车,手动创建换行符,换行符应该一直在这个地方。
  2. 他可以按空格键开始写新单词。
  3. 他可以继续为这个词写其他字符。

在每种情况下,他最终都会得到 18 个字符的长单词和“换行符”字符。我不知道如何发现,他想做什么。请记住,用户可以将光标放在任何地方并编辑他之前输入的文本。

我知道我可以创建自定义字符串类(从字符串继承)或保留输入单词的列表,但是实现这将是痛苦的,并且代码将开始变得不可读。

任何想法如何更好地做到这一点?

4

1 回答 1

0

我想到了。我的另一个想法是StringReader逐个字符地使用和阅读整个文本,但实现起来也非常麻烦和痛苦。

最好的方法是不更改RichTextBox. 我没有拆分文本,我没有检查行中是否有空格。我RichTextBox的尺寸是固定的,我可以接受。一行18个字符没有问题,但问题在于行数,因为它不像计算换行符那么简单。

我想改变行为的原因是因为以后我必须逐行发送这个文本。手动计算一行中有多少单词并动态创建行似乎很容易,但它很麻烦。

RichTextBox有非常有用的方法GetLineFromCharIndexText.Count()通过传递给它,我可以确定我有多少实际行。现在我的代码比以前短了两倍,而且似乎没有更大的错误。逐行发送文本并不是那么容易,因为我需要在读取字符时手动计算我在哪一行,但总的来说,它比以前的解决方案更容易接受。

于 2013-07-30T06:19:35.977 回答