2017-08-10 227 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]);