2017-08-17 163 views
0

我有一个文本框来保存文件内容。我有一个按钮,当它被按下时,它会根据一个字符串删除一行。这里是代码:c#删除文本框中的行,并删除空白行

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

但是,当一条线被删除时,它会在文本框的底部留下一个空行。这个问题是,当文件被保存时。由于多余的空行,它不能再被读取。当我尝试打开一个删除行后保存的文件时,出现此错误:“其他信息:索引超出了数组的范围”。当我读取文件时,我将每行作为字符串,然后使用“(',')”分割该行。

有没有办法改变代码,使其需要“newText”,并添加新的行,但不是最后一个字符串?或者以其他方式,以便在最后没有空行。

感谢

编辑:我得到它的工作(感谢L.B)

更新和工作代码:

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

你试过'fileContentTextBox.Text = string.Join(Environment.NewLine,lines)'? – Biscuits

回答

2

更换

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

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

非常感谢。我也为我工作,当我添加 'newText = string.Join(Environment.NewLine,lines);' '''' ThenEach(str => newText + = str +将只是取代它,谢谢:) – Dr4ken

+0

@ Dr4ken它的工作原理是因为'string.Join'代码通过给* newText指定一个新的值来覆盖你以前的代码* –

+0

Ohh好吧,谢谢,将来会记得:) – Dr4ken