2016-06-06 9 views
0

Wenn der Benutzer auf die mehrzeilige Textbox klickt. My Forms App sollte eine neue Zeile am Ende der aktuellen angeklickte Zeile einfügen.Wie füge ich eine neue Zeile in einer mehrzeiligen TextBox nach dem Mausklick in die TextBox ein?

Zum Beispiel sind dies die Linien in meiner Textbox:

-Hallo 
-Dear 
-Kindly 

Wenn der Benutzer an der zweiten Linie (-Liebe) klickt, sollte der Wert in meiner Textbox sein:

-Hallo 
-Dear 

-Kindly 

einer meiner (nicht) Versuche, die nicht die neue Linie einfügt:

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

Antwort

2

Wenn Sie etwas ein angehängt werden soll Array müssen Sie es neu erstellen, da Arrays feste Größe haben. Sie könnten LINQ verwenden:

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

ein wahrscheinlich besser lesbar Ansatz verwendet List<string>.Insert:

:

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

Wenn Sie den "Cursor" -Stellung halten möchten, können Sie TextBox.Select nutzen könnten

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); 
} 
+0

es fügt 2 neue Zeilen hinzu? – SamekaTV

+0

@ISeeSharp: Ich habe schon '.Concat (new [] {Environment.NewLine})' mit '.Concat (new [] {" \ n "})' ersetzt. Hast du es bemerkt? 'Environment.NewLine' fügt zwei Zeilen hinzu, da sowohl' \ r' als auch '\ n' als Zeilentrennzeichen behandelt werden. –

+0

@ISeeSharp: Ich habe meine Antwort bearbeitet, um einen besser lesbaren Ansatz mit einer 'Liste ' zu zeigen. –

0

Versuchen Sie Folgendes:

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

Es war auf vb arbeiten. Ich habe es in C# umgewandelt, daher kann es zu Syntaxfehlern kommen.

Verwandte Themen