Benutzer mit den meisten Antworten
Visual C# - ListBox Inhalte sollen beim nächsten Programm-Start immer noch da sein

Frage
Antworten
-
Hallo,
Die Items der einer ListBox werden in der Eigenschaft Items der ListBox gespeichert. Zum Speichern und Laden kannst du FormClosing und in Load verwenden.
Die Liste kannst du Beispielsweise in einer C# Usersetting speichern:
private void Form1_FormClosing(object sender, FormClosingEventArgs e) { Properties.Settings.Default.Items = new StringCollection(); Properties.Settings.Default.Items.AddRange(listBox1.Items.Cast<string>().ToArray()); Properties.Settings.Default.Save(); } private void Form1_Load(object sender, EventArgs e) { if (Properties.Settings.Default.Items != null) listBox1.Items.AddRange(Properties.Settings.Default.Items.Cast<string>().ToArray()); }
Die Einstellung "Items" kannst du in den Projekteinstellungen unter "Einstellungen" speichern. Siehe auch: http://msdn.microsoft.com/en-us/library/aa730869%28v=vs.80%29.aspx
Alternativ kannst du die Liste aber auch in einer Datei abspeichern. Im folgenden als XML-Datei auf dem Desktop:
string filename = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Desktop), "settings.xml"); private void Form1_FormClosing(object sender, FormClosingEventArgs e) { XDocument file = new XDocument(); file.Add(new XElement("Items", (from x in listBox1.Items.Cast<object>().ToArray() select new XElement("Item", x.ToString())))); file.Save(filename); } private void Form1_Load(object sender, EventArgs e) { if (File.Exists(filename)) { XDocument file = XDocument.Load(filename); foreach (XElement xe in file.Element("Items").Elements("Item")) listBox1.Items.Add(xe.Value); } }
Ich habe hier auf LINQ gesetzt, welches das Verarbeiten von Listen vereinfacht. Außerdem benutze die Klassen XDocument und XElement.
Der Code ist jetzt komplett auf WinForms bezogen, wenn du WPF benutzt könnte die eine order andere Anpassung nötig sein.
Koopakiller [kuːpakɪllɐ] | Webseite | Code Beispiele | Facebook | Snippets
- Als Antwort vorgeschlagen Marcel RomaModerator Samstag, 19. Januar 2013 11:39
- Als Antwort markiert Ionut DumaModerator Freitag, 25. Januar 2013 18:22
Alle Antworten
-
Hallo,
Die Items der einer ListBox werden in der Eigenschaft Items der ListBox gespeichert. Zum Speichern und Laden kannst du FormClosing und in Load verwenden.
Die Liste kannst du Beispielsweise in einer C# Usersetting speichern:
private void Form1_FormClosing(object sender, FormClosingEventArgs e) { Properties.Settings.Default.Items = new StringCollection(); Properties.Settings.Default.Items.AddRange(listBox1.Items.Cast<string>().ToArray()); Properties.Settings.Default.Save(); } private void Form1_Load(object sender, EventArgs e) { if (Properties.Settings.Default.Items != null) listBox1.Items.AddRange(Properties.Settings.Default.Items.Cast<string>().ToArray()); }
Die Einstellung "Items" kannst du in den Projekteinstellungen unter "Einstellungen" speichern. Siehe auch: http://msdn.microsoft.com/en-us/library/aa730869%28v=vs.80%29.aspx
Alternativ kannst du die Liste aber auch in einer Datei abspeichern. Im folgenden als XML-Datei auf dem Desktop:
string filename = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Desktop), "settings.xml"); private void Form1_FormClosing(object sender, FormClosingEventArgs e) { XDocument file = new XDocument(); file.Add(new XElement("Items", (from x in listBox1.Items.Cast<object>().ToArray() select new XElement("Item", x.ToString())))); file.Save(filename); } private void Form1_Load(object sender, EventArgs e) { if (File.Exists(filename)) { XDocument file = XDocument.Load(filename); foreach (XElement xe in file.Element("Items").Elements("Item")) listBox1.Items.Add(xe.Value); } }
Ich habe hier auf LINQ gesetzt, welches das Verarbeiten von Listen vereinfacht. Außerdem benutze die Klassen XDocument und XElement.
Der Code ist jetzt komplett auf WinForms bezogen, wenn du WPF benutzt könnte die eine order andere Anpassung nötig sein.
Koopakiller [kuːpakɪllɐ] | Webseite | Code Beispiele | Facebook | Snippets
- Als Antwort vorgeschlagen Marcel RomaModerator Samstag, 19. Januar 2013 11:39
- Als Antwort markiert Ionut DumaModerator Freitag, 25. Januar 2013 18:22
-
Ich bekomme keine Fehlermeldung, aber die Items sind trotzdem beim nächsten Start weg. Es wäre nett wenn du nochmal über mein Skript drüber schauen kannst:
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using System.Collections; using System.Collections.Specialized; namespace WindowsFormsApplication1 { public partial class Form1 : Form { private string strMyOriginalText; public Form1() { InitializeComponent(); } private void cmdEinfügen_Click(object sender, EventArgs e) { if (txtNeuesMitglied.Text == "") return; lstMitglieder.Items.Add(txtNeuesMitglied.Text); txtNeuesMitglied.Text = ""; } private void cmdLöschen_Click(object sender, EventArgs e) { int x = lstMitglieder.SelectedIndex; if (x != -1) lstMitglieder.Items.RemoveAt(x); } private void cmdNeuenOrtEinfügen_Click(object sender, EventArgs e) { if (txtNeuerOrt.Text == "") return; lstOrt.Items.Add(txtNeuerOrt.Text); txtNeuerOrt.Text = ""; } private void cmdOrtLöschen_Click(object sender, EventArgs e) { int x = lstOrt.SelectedIndex; if (x != -1) lstOrt.Items.RemoveAt(x); } private void cmdAWHLErstellen_Click(object sender, EventArgs e) { int i; lblFacebook.Text = "AWHL: " + dateTimePicker1.Text + " " + lstOrt.Text + "\n" + "\n"; for (i=0; i<lstMitglieder.SelectedItems.Count; i++) lblFacebook.Text += lstMitglieder.SelectedItems[i] + ", "; } private void cmdInFacebookPosten_Click(object sender, EventArgs e) { Clipboard.SetDataObject(lblFacebook.Text); System.Diagnostics.Process.Start("http://www.facebook.com/groups/174763399200645/"); } private void Form1_FormClosing(object sender, FormClosingEventArgs e) { Properties.Settings.Default.Items = new StringCollection(); Properties.Settings.Default.Items.AddRange(lstMitglieder.Items.Cast<string>().ToArray()); Properties.Settings.Default.Save(); } private void Form1_Load(object sender, EventArgs e) { if (Properties.Settings.Default.Items != null) lstMitglieder.Items.AddRange(Properties.Settings.Default.Items.Cast<string>().ToArray()); } } }
Viele Grüße
Marvin231
-
Soweit ich das jetzt sehen kann, funktioniert dein Code. Ich habe deinen Code teilweise in ein Neues Projekt eingefügt und getestet. Nach einem Neustart des Programms waren wieder alle Items in lstMitglieder vorhanden. Wenn du auch noch lstOrt mit abspeichern möchtest, so musst du dir eine 2. Einstellung (ItemsOrt) anlegen.
private void Form1_FormClosing(object sender, FormClosingEventArgs e) { Properties.Settings.Default.ItemsOrt = new StringCollection(); Properties.Settings.Default.ItemsOrt.AddRange(lstOrt.Items.Cast<string>().ToArray()); Properties.Settings.Default.Items = new StringCollection(); Properties.Settings.Default.Items.AddRange(lstMitglieder.Items.Cast<string>().ToArray()); Properties.Settings.Default.Save(); } private void Form1_Load(object sender, EventArgs e) { if (Properties.Settings.Default.Items != null) lstMitglieder.Items.AddRange(Properties.Settings.Default.Items.Cast<string>().ToArray()); if (Properties.Settings.Default.ItemsOrt != null)
lstOrt.Items.AddRange(Properties.Settings.Default.ItemsOrt.Cast<string>().ToArray());
}Koopakiller [kuːpakɪllɐ] | Webseite | Code Beispiele | Facebook | Snippets
-
ok, hier ist der link:
https://skydrive.live.com/redir?resid=F82085DAA48DB2B7!109&authkey=!APsaXJqqs_5mqHE
-
Ich habe den Fehler gefunden.
Form1_FormClosing ist nicht als Handler für FormClosing zugeordnet gewesen. Öffne deine Form, markiere diese, gehe in den Eigenschaftendialog und schreibe als Ereignishandler für FormClosing wieder Form1_FormClosing hinein. Damit ist das Event wieder abbonniert. Dann sollte es gehen.Koopakiller [kuːpakɪllɐ] | Webseite | Code Beispiele | Facebook | Snippets
-
Ich habe den Fehler gefunden.
Form1_FormClosing ist nicht als Handler für FormClosing zugeordnet gewesen. Öffne deine Form, markiere diese, gehe in den Eigenschaftendialog und schreibe als Ereignishandler für FormClosing
Kommt ein bisschen zu spät^^ aber irgendwie check ich das mit dem Form Closing dings nicht :( -
Was verstehst du denn nicht? Trage einfach den Eventhandler im Eigenschaften-Dialog ein...
Viele Grüße, Tom Lambert - MVP, MCC und MSP
Wozu Antworten markieren und Posts bewerten? Klicke hier
Nützliche Links: .NET Quellcode | C#/VB.NET Konverter | GitHub Forum Samples | Account bestätigen (Verify Your Account)
Ich: Webseite | Facebook | Twitter | Code Snippets | GitHub