Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/338.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# WinForms中每行字符数和每文本框行数_C#_.net_Winforms - Fatal编程技术网

C# WinForms中每行字符数和每文本框行数

C# WinForms中每行字符数和每文本框行数,c#,.net,winforms,C#,.net,Winforms,我正在尝试创建一个文本框,它的每行字符数有一个限制,如果达到这个限制,就会创建新行。现在,我正试图在SelectionStartin键上抢夺,并确定用户是否处于下一行的位置,然后我将他移动到下一行,直到他达到某一行限制 这方面的逻辑令人惊讶地复杂。我必须看看这行的最后一件事是否是单词,最后是否没有分隔符。我需要移动到下一行并与下一行合并,检查下一行是否太长,等等。所有这些都不太好用,这并不奇怪。再加上太多的字符串操作,甚至使用StringBuilder都能达到我想要的速度 有没有更简单的方法来做

我正在尝试创建一个文本框,它的每行字符数有一个限制,如果达到这个限制,就会创建新行。现在,我正试图在SelectionStartin键上抢夺,并确定用户是否处于下一行的位置,然后我将他移动到下一行,直到他达到某一行限制

这方面的逻辑令人惊讶地复杂。我必须看看这行的最后一件事是否是单词,最后是否没有分隔符。我需要移动到下一行并与下一行合并,检查下一行是否太长,等等。所有这些都不太好用,这并不奇怪。再加上太多的字符串操作,甚至使用StringBuilder都能达到我想要的速度


有没有更简单的方法来做这样的事情

如果视觉效果不重要,可以允许自由输入字符串。保存时,您可以在循环中使用substring方法来获得所需的行长度,并根据需要插入“\n”

您应该能够在文本框的keyup事件中执行此操作:

string[] lines = textbox1.Text.Replace(Environment.Newline, "\n").Split('\n');
if (lines.Count > 10)
{
    // More than 10 lines. Show an error or something
    e.Handled = true;
    e.SuppressKeyPress = true;
    return
}

if (lines.Any(z => z.Length > 100))
{
    // More then 100 character on a line. Do Something
    e.Handled = true;
    e.SuppressKeyPress = true;
    return;
}

当然,将10更改为您所需的行数,将100更改为您所需的每行最大长度。

您只需要在显示屏上换行,还是需要使用换行符存储输入?如果只是为了显示,TextBox有一个WordWrap属性,它可以满足您的需要。如果您需要使用换行符存储数据,则链接可能会有所帮助。是另一个可能有帮助的。我需要在.Text中使用换行符来存储。谢谢你的回复,我会查一查。你可以看看这篇文章,可能会有类似问题的答案