C# 在文本框中单击鼠标后,如何在多行文本框中插入换行符?

C# 在文本框中单击鼠标后,如何在多行文本框中插入换行符?,c#,string,textbox,multiline,C#,String,Textbox,Multiline,当用户单击多行文本框时。“我的表单”应用程序应在当前单击的行末尾插入新行 例如,以下是我的文本框中的行: -Hallo -Dear -Kindly 如果用户单击第二行(-Dear),我的文本框中的值应为: -Hallo -Dear -Kindly 我的一次(失败)尝试没有插入新行: int line = txtProjects.GetLineFromCharIndex(txtProjects.SelectionStart); txtProjects.Lines[line] = txtPro

当用户单击多行文本框时。“我的表单”应用程序应在当前单击的行末尾插入新行

例如,以下是我的文本框中的行:

-Hallo
-Dear
-Kindly
如果用户单击第二行(-Dear),我的文本框中的值应为:

-Hallo
-Dear

-Kindly
我的一次(失败)尝试没有插入新行:

int line = txtProjects.GetLineFromCharIndex(txtProjects.SelectionStart);
txtProjects.Lines[line] = txtProjects.Lines[line].Insert(txtProjects.Lines[line].Length, Environment.NewLine);

如果要将某些内容附加到数组,则必须重新创建它,因为数组的大小是固定的。您可以使用LINQ:

int lineCount = txtProjects.GetLineFromCharIndex(txtProjects.SelectionStart) + 1; // zero based
string[] lines = txtProjects.Lines;
txtProjects.Lines = lines 
    .Take(lineCount)
    .Concat(new[] {"\n"})
    .Concat(lines.Skip(lineCount))
    .ToArray();
一种可能更具可读性的方法是使用
列表。插入

List<string> lines = txtProjects.Lines.ToList();
lines.Insert(lineCount, "");  //  null works also
txtProjects.Lines = lines.ToArray();

如果要将某些内容附加到数组,则必须重新创建它,因为数组的大小是固定的。您可以使用LINQ:

int lineCount = txtProjects.GetLineFromCharIndex(txtProjects.SelectionStart) + 1; // zero based
string[] lines = txtProjects.Lines;
txtProjects.Lines = lines 
    .Take(lineCount)
    .Concat(new[] {"\n"})
    .Concat(lines.Skip(lineCount))
    .ToArray();
一种可能更具可读性的方法是使用
列表。插入

List<string> lines = txtProjects.Lines.ToList();
lines.Insert(lineCount, "");  //  null works also
txtProjects.Lines = lines.ToArray();
试试这个:

var p = TextBox1.GetLineFromCharIndex[TextBox1.SelectionStart];
List<string> str = new List<string>();
str.AddRange(TextBox1.Lines);
str.Insert(p + 1, "");
TextBox1.Text = "";
foreach (void st_loopVariable in str) {
    st = st_loopVariable;
    TextBox1.Text += st + Constants.vbNewLine;
}
var p=TextBox1.GetLineFromCharIndex[TextBox1.SelectionStart];
List str=新列表();
str.AddRange(TextBox1.Lines);
插入(p+1,“”);
TextBox1.Text=“”;
foreach(str中的void st_loopVariable){
st=st_循环变量;
TextBox1.Text+=st+Constants.vbNewLine;
}
它是在vb上工作的。我将其转换为C#,因此可能会出现一些语法错误。

尝试以下操作:

var p = TextBox1.GetLineFromCharIndex[TextBox1.SelectionStart];
List<string> str = new List<string>();
str.AddRange(TextBox1.Lines);
str.Insert(p + 1, "");
TextBox1.Text = "";
foreach (void st_loopVariable in str) {
    st = st_loopVariable;
    TextBox1.Text += st + Constants.vbNewLine;
}
var p=TextBox1.GetLineFromCharIndex[TextBox1.SelectionStart];
List str=新列表();
str.AddRange(TextBox1.Lines);
插入(p+1,“”);
TextBox1.Text=“”;
foreach(str中的void st_loopVariable){
st=st_循环变量;
TextBox1.Text+=st+Constants.vbNewLine;
}

它是在vb上工作的。我将其转换为C#,因此可能存在一些语法错误。

它添加了两行新代码?@ISeeSharep:我已经将
.Concat(new[]{Environment.NewLine})
替换为
.Concat(new[]{n})
。你注意到了吗<代码>环境。换行符
将添加两行,因为
\r
\n
都被视为行分隔符。@ISeeSharep:我编辑了我的答案,以显示具有
列表
的更具可读性的方法。为什么光标会更改?它的位置返回到第一行的第一个位置。@IseeSharep:i编辑我的答案以显示完整的示例。它添加了两行新的内容?@IseeSharep:i已经将
.Concat(new[]{Environment.NewLine})
替换为
.Concat(new[]{n})
。你注意到了吗<代码>环境。换行符
将添加两行,因为
\r
\n
都被视为行分隔符。@ISeeSharep:我编辑了我的答案,以显示具有
列表
的更具可读性的方法。为什么光标会更改?它的位置返回到第一行的第一个位置。@ISeeSharp:我编辑了我的答案以显示完整的示例。