2017-08-17 4 views
0

Ich habe ein Textfeld, das Dateiinhalt enthält. Ich habe eine Schaltfläche, die, wenn sie gedrückt wird, löscht eine Zeile basierend auf einer Zeichenfolge. Hier ist der Code:C# Zeile aus Textfeld löschen und leere Zeile entfernen

private void deleteModuleButton_Click(object sender, EventArgs e) 
    { 
     String newText = String.Empty; 
     List<String> lines = fileContentTextBox.Text.Split(new String[] { Environment.NewLine }, StringSplitOptions.RemoveEmptyEntries).ToList(); 
     lines.RemoveAll(str => str.Contains(deleteModuleComboBox.Text)); 
     lines.ForEach(str => newText += str + Environment.NewLine); 
     fileContentTextBox.Text = newText; 
    } 

Wenn jedoch eine Zeile gelöscht wird, bleibt eine leere Zeile am unteren Rand des Textfelds. Das Problem dabei ist, dass die Datei gespeichert wird. Es kann wegen der zusätzlichen Leerzeile nicht mehr gelesen werden. Ich erhalte diesen Fehler, wenn ich versuche, eine Datei zu öffnen, die gespeichert wurde, nachdem eine Zeile gelöscht wurde: "Zusätzliche Information: Index befand sich außerhalb der Grenzen des Arrays". Wenn ich die Datei lese, nehme ich jede Zeile als Zeichenfolge und spalte dann diese Zeile mit "(',')".

Gibt es eine Möglichkeit, den Code so zu ändern, dass er "newText" übernimmt und neue Zeilen hinzufügt, aber nicht für die letzte Zeichenfolge? Oder anders, nur damit am Ende keine Leerzeile steht.

Dank

EDIT: Ich habe es funktioniert (Danke L.B)

aktualisiert und Arbeitscode:

private void deleteModuleButton_Click(object sender, EventArgs e) 
    { 
     String newText = String.Empty; 
     List<String> lines = fileContentTextBox.Text.Split(new String[] { Environment.NewLine }, StringSplitOptions.RemoveEmptyEntries).ToList(); 
     lines.RemoveAll(str => str.Contains(deleteModuleComboBox.Text)); 
     newText = string.Join(Environment.NewLine, lines); 
     fileContentTextBox.Text = newText; 
    } 
+0

Haben Sie versucht, 'fileContentTextBox.Text = string.Join (Environment.NewLine, Zeilen)'? – Biscuits

Antwort

2

ersetzen

lines.ForEach(str => newText += str + Environment.NewLine); 

mit

newText = string.Join(Environment.NewLine , lines); 
+0

Vielen Dank. Ich arbeitete auch für mich, als ich 'newText = string.Join (Environment.NewLine, Zeilen) hinzufügte;' Gleich nach 'linies.ForEach (str => newText + = str + Environment.NewLine);' Aber ich werde es nur ersetzen, danke :) – Dr4ken

+0

@ Dr4ken Es funktioniert, weil 'string.Join' Code überschreibt Ihren vorherigen Code durch Zuweisen eines neuen Werts zu * newText * –

+0

Ohh okay, danke, wird daran erinnern, dass für die Zukunft :) – Dr4ken