2017-11-13 2 views
0

Ich versuche ein Fensterprogramm zu erstellen, in dem das Programm aus einer Textdatei liest und die Daten in einer Listbox anzeigt. Ich habe versucht, die unten Codierung, aber das Problem ist jetzt, dass jedes Mal, wenn ich auf die Schaltfläche klicke, wird es anhängen und die Daten werden sich wiederholen.Aus der Textdatei lesen und mit der Schaltfläche in die Listbox füllen

Wie mache ich es so, dass es die Datei liest und nur neue Eingabedaten enthält?

private void Button_Click(object sender, RoutedEventArgs e) 
{ 
    using (StreamReader sr = new StreamReader("C:\\Users\\jason\\Desktop\\Outbound.txt")) 
    { 
     string line; 
     // Read and display lines from the file until the end of 
     // the file is reached. 
     while ((line = sr.ReadLine()) != null) 
     { 
      Listbox1.Items.Add(line); 
     } 
     sr.Close(); 
    } 
} 
+4

"Listbox1.Items.Clear()" einmal vor dem Lesen der Datei aufrufen? – Clemens

+0

Gibt es eine Möglichkeit, die Liste zu aktualisieren, ohne eine Schaltfläche zu verwenden, um sie auszuführen? –

+1

* Versuchen Sie nicht, die Listbox direkt zu ändern. Sowohl WinForms als auch WPF unterstützen die Datenbindung. 80% der WPF-Funktionalität hängt von der Datenbindung ab. Sie brauchen keine Wege, um die Liste zu aktualisieren, WPF wird es automatisch tun, wenn Sie Datenbindung verwenden –

Antwort

4

Die wohl einfachste Art und Weise zu tun, was Sie wollen, ist es, alle Zeilen aus der Datei in eine Sammlung zu lesen, und weisen Sie dann die Sammlung an die Itemssource-Eigenschaft des List-Box:

private void Button_Click(object sender, RoutedEventArgs e) 
{ 
    Listbox1.ItemsSource = File.ReadAllLines(@"C:\Users\jason\Desktop\Outbound.txt"); 
} 
0

Wie Clemens sagte in Kommentar, Sie können entweder Listbox1.Items.Clear() oder Listbox1.ItemsSource = File.ReadAllLines(@"C:\Users\jason\Desktop\Outbound.txt");
Aber das würde immer alle Ihre Listbox mit der Datei ersetzen. Wenn Sie nur wollen, wie Sie gesagt haben, neue Daten einzugeben, können Sie einfach überprüfen, ob if(!Listbox1.Items.Contains(line)) vor dem Hinzufügen des Elements. Hängt davon ab, was Sie wirklich wollen, reupdate die ganze Liste oder nur neue Einträge hinzufügen und nicht entfernen alte.

+0

Überprüfen 'Items.Contains (line)' es wahrscheinlich nicht genug. Denken Sie an potenziell gelöschte Zeilen, Sie müssten die zugehörigen ListBox-Elemente löschen. – Clemens

+0

Ja deshalb habe ich gesagt: Wenn er nur neue Einträge hinzufügen und alte oder einige gelöscht aus der Datei lassen will, weiß ich nicht den Zweck seines Programms, so dass es möglicherweise benötigt wird. Hängt davon ab, was er als Verhalten will. –

+0

Aber dann habe ich vielleicht falsch verstanden was er meinte und dann ist ja meine Antwort nicht das was er braucht –

Verwandte Themen