在TextBox中单击鼠标后,如何在多行TextBox中插入换行符?

时间:2016-06-06 08:58:42

标签: c# string textbox multiline

当用户点击多行文本框时。 My Forms App应在当前点击的行末尾插入一个新行。

例如,这些是我的文本框中的行:

-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);

2 个答案:

答案 0 :(得分:2)

如果要将某些内容附加到数组,则必须重新创建它,因为数组是固定大小的。您可以使用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>.Insert

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

如果你想保留&#34;光标&#34; -position,你可以使用TextBox.Select

private void txtProjects_Clicked(object sender, EventArgs e)
{
    int cursorPos = txtProjects.SelectionStart;
    int lineCount = txtProjects.GetLineFromCharIndex(cursorPos) + 1; // zero based
    List<string> lines = txtProjects.Lines.ToList();
    lines.Insert(lineCount, null);
    txtProjects.Lines = lines.ToArray();
    txtProjects.Select(cursorPos, 0);
}

答案 1 :(得分:0)

试试这个:

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;
}

正在研究vb。我将它转换为C#,因此可能会出现一些语法错误。