RichTextBox中的手动自动换行

问题描述 投票:1回答:2

我需要在Windows窗体中创建RichTextBox,该窗体将连续最多18个字符,最多6行。 RichTextBox的问题是当您写很长的单词时,它显示为两行,但将其视为一行。例如:

这是超能力主义者icexpialidocious

这是两行文字。

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

算法非常简单:当文本更改时,请按'空格'和'换行'字符进行分割。然后,我计算在一行中输入了多少个字符,如果有空格,我将其放置在这一行中。如果没有文字空间,我将创建新行。

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

  1. 他可以按Return键以手动创建换行符,该字符始终应在此位置。
  2. 他可以按空格键开始写新词。
  3. 他可以继续为这个单词写其他字符。

在每种情况下,他都会以18个字符的长字和'换行'字符结尾。我不知道该怎么检测,他想做什么。并且请记住,用户可以将光标放置在任何地方并编辑他之前输入的文本。

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

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

winforms richtextbox word-wrap
2个回答
0
投票

我知道了。我的另一个想法是使用StringReader并逐字符读取全文,但是实现起来也很麻烦而且很麻烦。

最佳方法是不更改RichTextBox的默认行为。我没有分割文本,也没有检查行中是否有空格。我的RichTextBox大小固定,我可以接受。行中的18个字符没有问题,但是问题在于计数行,因为它不像计数换行符那样简单。

之所以要更改行为,是因为以后我必须逐行发送此文本。手动计算一行中可以容纳多少个单词并动态创建行似乎很容易,但这很容易出错。

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

© www.soinside.com 2019 - 2024. All rights reserved.