当用户点击多行文本框时。 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);
答案 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#,因此可能会出现一些语法错误。