2017-08-10 225 views
0

C#可以用文本框中的用户输入替换文本文件中的单行文本吗?C#使用文本框从文本文件中删除一行文本

我的文本文件具有相同名称“宏茂桥”多串

我的程序应该是一个自行车租赁公司,租赁自行车的客户。我有要求显示位置。默认位置设置为“Ang mo kio”,所以我用StreamWriter将它写入文本文件。

private void button1_Click(object sender, EventArgs e) 
{ 
    StreamWriter location = new StreamWriter("C:\\temp\\Mb.txt", true); 
    location.WriteLine(textBox7.Text); 
    location.Close(); 
} 

并将其与我的组合框链接,以便当我单击组合框索引时,它将根据readlines显示文本框中的位置。

if (comboBox1.SelectedIndex >= 0) 
{ 
    string filename = ("C:\\temp\\Mb.txt"); 
    string[] lines = File.ReadAllLines(filename); 

    textBox2.Text = (lines[comboBox1.SelectedIndex]); 
} 

现在我想要租出去的自行车,但是当我点击一个按钮选择在combobox1索引之后,我删除了索引,使下一个客户不能把它租出去。

string X; 

int index; 
index = comboBox1.SelectedIndex; 
if (index != -1) 
{ 
    X = comboBox1.Items[index].ToString(); 
    comboBox1.Items.RemoveAt(index); 
} 


using (StreamWriter sw1 = new StreamWriter("C:\\temp\\MountainBike.txt")) 
{ 
    foreach (var item in comboBox1.Items) 
    { 
     sw1.WriteLine(item); 
    } 
    this.Close(); 
} 

现在主要的问题是我的位置保持不变,我不能删除从什么是在文本框中所示的线,它仍然在我的文本文件。

我试过用StreamWriter覆盖它,但它只是删除所有行 - 不是一行。

+0

您的英语正在使此_very_难以遵循,您是否试图删除基于组合框指定的索引的文本文件中的行?你能告诉我们你的计划的最终目标以及困难在哪里? –

+0

是否有任何理由不能将您的位置数据保存在内存中,而不是每次都将它写入文件?如果你没有写入文件,它会使这更容易和更简单? – Sach

+0

欢迎来到Stack Overflow!我主要编辑你的问题,以改善语法和代码格式。最大的改变是以我认为更多人会理解的形式重写你的原始问题。如果您有更多的解释,欢迎您重新访问并改进问题。 –

回答

0

尽管我会意识到它与一开始有点不同,但这里有一个建议,您可以如何在您的结构中构建一个解决方案。

采取从文本框中的文本,它在单一的行拆分:

List<string> allLines = textBox2.Text.Split('\n').ToList(); 

现在使用从组合框的选择同样的指数,以删除列表中的文本(如果我还记得,顺序是一样=)

X = comboBox1.Items[index].ToString(); 
comboBox1.Items.RemoveAt(index); 
allLines.RemoveAt(index); 

textBox2.Text = String.Join("\n", allLines); 

编辑再次插入文本:?!

可能是一个更好的解决办法是将文件加载为List<string>

List<string> lines = File.ReadAllLines(filename).ToList(); 

这将让您可以立即使用组合框的选定索引,直接从源头上删除线并将它写入到该文件又回来了。这样你就会有一个更新的源代码,你可以继续使用组合框中的索引(因为lines和组合框将具有与我理解的相同的项目)请纠正我,如果我错了。

comboBox1.Items.RemoveAt(index); 
lines.RemoveAt(index); 
textBox2.Text = (lines[comboBox1.SelectedIndex]);