【问题标题】:Multiline TextBox with custom word wrapping带有自定义自动换行的多行文本框
【发布时间】:2011-09-19 15:56:29
【问题描述】:

我开始使用 .Net 和 C# 进行编程,目前我被卡住了。我有一个与在 stackoverflow 上发布此问题非常相似的问题:C#: Multiline TextBox with TextBox.WordWrap Displaying Long Base64 String

对这个问题的回答是这段代码:

public IEnumerable<string> SimpleWrap(string line, int length) 
{ 
   var s = line; 
   while (s.Length > length) 
   { 
     var result = s.Substring(0, length); 
     s = s.Substring(length); 
     yield return result; 
   } 
   yield return s; 
} 

我不知道如何使用那段代码。有人请给我一个代码 sn-p,它使用这种特殊的方法来编写自动插入新行的文本。 我的代码目前如下所示:

var length = GetMaximumCharacters(txtBxResults);
var txtWrap = SimpleWrap(stringValue, length);
foreach (string s in txtWrap)
{
    txtBxResults.AppendText(s);
}

如果我使用 AppendText 方法,它会简单地将所有文本写在我不想要的一行中。 任何回复将不胜感激。

谢谢, KK

【问题讨论】:

  • 文本框是如何使用的?我的意思是...您是以编程方式一次填充它还是将文本附加到它?还是用户自己输入?
  • @PedroC88 文本框以编程方式填充。它用连字符分隔的化合物和逗号分隔的化合物(Fe-Cr-Ni、Al-Ni-Co)中的每个元素填写化合物的组合。我想要的是文本框应该在有逗号而不是连字符的行尾插入一个新行。此外,我不需要在新行中的每个化合物,只有在文本框的同一行中没有更多空间时才应该开始新行。希望我已经清楚地解释了自己。感谢您的建议

标签: c# winforms textbox ienumerable word-wrap


【解决方案1】:

你几乎做对了,你只需要插入换行符。试试

foreach (string s in txtWrap)
{
  txtBxResults.AppendText(s + Environment.NewLine);
}

【讨论】:

  • 感谢您的回复。如果我按照您的建议进行操作,那么在 foreach 的每次迭代之后,都会出现一条我不想要的新行。当单词不再适合文本框时,我只希望文本框插入新行。理想情况下,默认的自动换行功能很好,但由于我的单词还包含“-”(连字符),因此文本框自动换行会在我不习惯的连字符处破坏单词。这就是为什么我使用与我的类似问题建议的代码块。
【解决方案2】:

好吧,我现在不能给你确切的代码(我稍后会回来发布)但一般来说,你应该做的是识别下一个逗号的索引,如果当前行上的字符+ 该索引 > 行的长度,然后在该化合物之前附加一个新行。如果您在 bucle 中执行此操作,则完成后应该正确格式化,还要考虑到最后一个复合词末尾不会有(我认为)逗号。

【讨论】:

    猜你喜欢
    • 2016-01-02
    • 1970-01-01
    • 1970-01-01
    • 2013-03-08
    • 2012-10-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多