VB Forms My Settings Save funktioniert nicht

  • VB.NET

Es gibt 37 Antworten in diesem Thema. Der letzte Beitrag () ist von Dksksm.

    Außerdem ein anderes Problem bei der Richtextbox funktioniert das ohne probleme jetzt. Bei einer listbox nicht wieso ? gibt es da etwas zu beachten?

    C#-Quellcode

    1. private void Button6_Click(object sender, EventArgs e)
    2. {
    3. Properties.Settings.Default.verlauf = listBox1.Text;
    4. Properties.Settings.Default.Save();
    5. }

    C#-Quellcode

    1. listBox1.Text = Properties.Settings.Default.verlauf;

    @Moritzgs1 Gib mal listBox1.Text in einer MessageBox aus.
    Lerne zu debuggen:
    Debuggen, Fehler finden und beseitigen
    =====
    Und:
    Keine Fragen zu Programmierung (auch wenn Deine Frage C# ist) in den PN!
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    @Moritzgs1 Mit welchem Code bekommst Du denn den Text in Deine ListBox?
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!

    C#-Quellcode

    1. private void Button6_Click(object sender, EventArgs e)
    2. {
    3. Properties.Settings.Default.verlauf = listBox1.Text;
    4. Properties.Settings.Default.Save();
    5. }


    Habe es so gemacht wie beim der richtextbox quasi

    C#-Quellcode

    1. listBox1.Text = Properties.Settings.Default.verlauf;

    @Moritzgs1 Missverständnis.
    Wie bekommst Du den Inhalt, den Du speichern willst, in die ListBox?
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!

    C#-Quellcode

    1. private void Button1_Click(object sender, EventArgs e)
    2. {
    3. webBrowser1.Navigate(textBox1.Text);
    4. listBox1.Items.Add(textBox1.Text);


    Bei jedem klick auf den Button wird der eintrag aus der textbox in die listbox eingefügt.


    Aktueller Kompletter Code meines Webbrowsers mit ein paar spielereien etc:

    C#-Quellcode

    1. using System;
    2. using System.Windows.Forms;
    3. namespace WebBrowser
    4. {
    5. public partial class Browser : Form
    6. {
    7. public static object Url { get; private set; }
    8. public Browser()
    9. {
    10. InitializeComponent();
    11. }
    12. private void Form1_Load(object sender, EventArgs e)
    13. {
    14. webBrowser1.Navigate("www.Bkukr.de"); //Lädt Bkukr als Startseite
    15. textBox1.Text = "www.bkukr.de";
    16. webBrowser1.ScriptErrorsSuppressed = true; //Verhindert Script error fehler
    17. richTextBox1.Text = Properties.Settings.Default.Speicher;
    18. listBox1.Text = Properties.Settings.Default.verlauf;
    19. }
    20. private void Button1_Click(object sender, EventArgs e)
    21. {
    22. webBrowser1.Navigate(textBox1.Text);
    23. listBox1.Items.Add(textBox1.Text);
    24. Properties.Settings.Default.verlauf = listBox1.Text;
    25. Properties.Settings.Default.Save();
    26. }
    27. private void Buttonzurück_Click(object sender, EventArgs e)
    28. {
    29. webBrowser1.GoBack();
    30. }
    31. private void ButtonVor_Click(object sender, EventArgs e)
    32. {
    33. webBrowser1.GoForward();
    34. }
    35. private void BeendenToolStripMenuItem_Click(object sender, EventArgs e)
    36. {
    37. Application.Exit(); //Beendet den Browser
    38. }
    39. private void DruckenToolStripMenuItem_Click(object sender, EventArgs e)
    40. {
    41. webBrowser1.Print(); //Drucken
    42. webBrowser1.ShowPrintDialog();
    43. webBrowser1.ShowPrintPreviewDialog();
    44. }
    45. private void SpeichernToolStripMenuItem_Click(object sender, EventArgs e)
    46. {
    47. webBrowser1.ShowSaveAsDialog(); //Seite Speichern
    48. }
    49. private void Button2_Click(object sender, EventArgs e)
    50. {
    51. webBrowser1.Navigate("www.Bkukr.de"); // Geht zur Startseite
    52. textBox1.Text = "www.bkukr.de";
    53. }
    54. private void CreditsToolStripMenuItem_Click_1(object sender, EventArgs e)
    55. {
    56. MessageBox.Show("Dieser Browser wurde erstellt von einem Menschen");
    57. }
    58. private void BrowserHilfeToolStripMenuItem_Click(object sender, EventArgs e)
    59. {
    60. MessageBox.Show("Wenn sie hilfe benötigen melden sie sich " +
    61. "unter der Email: hilfe@hilfe.de");
    62. }
    63. private void FeedbackSendenToolStripMenuItem_Click(object sender, EventArgs e)
    64. {
    65. MessageBox.Show("Wir freuen uns über Feedback dafür einfach " +
    66. "an die Email feedback@feedback.de schreiben");
    67. }
    68. private void EntwicklerModusToolStripMenuItem_Click(object sender, EventArgs e)
    69. {
    70. MessageBox.Show("Dieser Bereich ist nur für Entwickler.");
    71. }
    72. private void VerlaufÖffnenToolStripMenuItem_Click(object sender, EventArgs e)
    73. {
    74. button3.Visible = true; //öffnet den Verlauf
    75. listBox1.Visible = true;
    76. button6.Visible = true;
    77. }
    78. private void VerlaufLeerenToolStripMenuItem_Click(object sender, EventArgs e)
    79. {
    80. listBox1.Items.Clear(); //leert den Verlauf
    81. }
    82. private void Button3_Click(object sender, EventArgs e)
    83. {
    84. listBox1.Visible = false; //schließt den Verlauf
    85. button3.Visible = false;
    86. button6.Visible = false;
    87. }
    88. private void LoginToolStripMenuItem_Click(object sender, EventArgs e)
    89. {
    90. Login1 loginform = new Login1();
    91. loginform.Show();
    92. }
    93. private void TextBox1_KeyDown(object sender, KeyEventArgs e)
    94. {
    95. webBrowser1.Navigate(textBox1.Text);
    96. }
    97. private void Button4_Click(object sender, EventArgs e)
    98. {
    99. Properties.Settings.Default.Speicher = richTextBox1.Text;
    100. Properties.Settings.Default.Save();
    101. }
    102. private void NotizToolStripMenuItem_Click(object sender, EventArgs e)
    103. {
    104. panel1.Visible = true;
    105. }
    106. private void Button5_Click(object sender, EventArgs e)
    107. {
    108. panel1.Visible = false;
    109. }
    110. private void ListBox1_SelectedIndexChanged(object sender, EventArgs e)
    111. {
    112. Properties.Settings.Default.verlauf = listBox1.Text;
    113. Properties.Settings.Default.Save();
    114. }
    115. private void Button6_Click(object sender, EventArgs e)
    116. {
    117. Properties.Settings.Default.verlauf = listBox1.Text;
    118. Properties.Settings.Default.Save();
    119. }
    120. private void TestToolStripMenuItem_Click(object sender, EventArgs e)
    121. {
    122. MessageBox.Show(listBox1.Text);
    123. }
    124. }
    125. }

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Moritzgs1“ ()

    Moritzgs1 schrieb:

    C#-Quellcode

    1. listBox1.Items.Add(textBox1.Text);
    AHa. Was sagt der Experte-werden-woller dazu?
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    @Moritzgs1 Was unterscheidet Deinen Code, den Inhalt der ListBox in den Settings abzulegen vom Code der Befüllung?
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    @Moritzgs1 Langsam beginnst Du zu begreifen. :D
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Habe aktuell dieses zum speichern des verlaufs: Quasi so wie bei der sache mit der richtextbox.

    C#-Quellcode

    1. private void listBox1_SelectedIndexChanged(object sender, EventArgs e)
    2. {
    3. listBox1.Items.Add(textBox1.Text);
    4. Properties.Settings.Default.verlauf = listBox1.Text;
    5. Properties.Settings.Default.Save();
    6. Properties.Settings.Default.Reload();
    7. }


    Und habe zusätzlich noch in der Form load das zum laden des speichers allerdings funktioniert es komischerweise bei der listbox nicht.

    C#-Quellcode

    1. private void Form1_Load(object sender, EventArgs e)
    2. {
    3. webBrowser1.Navigate("www.bkukr.de");
    4. textBox1.Text = "www.bkukr.de";
    5. richTextBox1.Text = Properties.Settings.Default.Speicher;
    6. listBox1.Text = Properties.Settings.Default.verlauf;
    7. }



    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Moritzgs1“ ()

    Eine ListBox hat Items, mit denen man also die ListBox befüllt (listBox1.Items.Add(textBox1.Text);). Dein Ansatz mit listBox1.Text = ist damit zum Scheitern verurteilt.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    Mal ganz ehrlich, etwas mehr suchen und du hättest alles gefunden. Sowohl hier als auch ansonsten im Web.

    1. Settings kann man den Steuerelementen meistens direkt und ohne diese ganze manuelle Hin- und Her-Zuweiserei per Code direkt in den Eigenschaften zuweisen. Das ist nicht nur viel weniger Fehlerträchtig, es spart auch Zeit und (selbstgeschriebene) Codezeilen.
    Für alle "einfachen" Datentypen ist also eine direkte Zuweisung per Eigenschaft möglich, bei Objekten sie die Listbox benötigt, muss man was basteln. Das was ich da gebastelt habe ist übrigens nicht von mir, so fleißig war ich gar nicht, sondern habe es hier gefunden: ListBox Items in My.Settings speichern

    2. Die Settings speichert man nicht bei jeder Veränderung, sondern einmal beim Programmende.

    Also Step 1, die Settings selbst


    Step 2, die Zuweiung der Setting in die Steuerelemente-Eigenschaft


    Step 3, der erste Programmlauf


    Step 4, eine kleine Veränderung eines Textes


    Step 5 nach Programmende, dort wo die Benutzersetting dieses Programms gespeichert worden sind ansehen


    Und hier noch der Code

    C#-Quellcode

    1. private void Form1_FormClosing(object sender, FormClosingEventArgs e)
    2. {
    3. System.Collections.Specialized.StringCollection liste = new System.Collections.Specialized.StringCollection();
    4. foreach (string eintrag in listBoxTest.Items)
    5. liste.Add(eintrag);
    6. SettingsTestApp.Properties.Settings.Default.ListBoxTEst = liste;
    7. SettingsTestApp.Properties.Settings.Default.Save();
    8. }
    9. private void Form1_Shown(object sender, EventArgs e)
    10. {
    11. foreach (string eintrag in SettingsTestApp.Properties.Settings.Default.ListBoxTEst)
    12. listBoxTest.Items.Add(eintrag);
    13. }

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Dksksm“ ()

    Moritzgs1 schrieb:

    C#-Quellcode

    1. Properties.Settings.Default.verlauf = listBox1.Text;
    Hier überschreibst Du den letzten Wert mit dem neuen Wert.
    Ansonsten verstehe den Post von @Dksksm.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Nachtrag noch:
    Ein Setting.Reload nach einem Setting.Save ist absolut unsinnig. Mit Setting.Save wurde der Speicher ja in die lokale Usersetting geschrieben, sofern sie sich von den Setting unterscheiden, die im Programm selbst hinterlegt sind.
    Das Setting.Reload macht dann Sinn, wenn man etwas an den Werten die an die Settings gebunden sind, verändert hat, diese Änderung aber noch nicht geschrieben ist und der in den Setting-Dateien gespeicherte Zustand wieder hergestellt werden soll. Es stellt also den Zustand wieder her, der beim letzten Setting.Save gesichert wurde. Ist ein Setting.Save aber unmittelbar zuvor gewesen, dann ist der Zustand ja identisch, das Setting.Reload ist also nur "Zeitverplemperung"

    Ein Setting.Load gibt es übrigens gar nicht und ist auch nicht nötig, die letzt gespeicherten Settings werden auch bei C# immer gelesen. Nur gespeichert wird nicht automatisch.

    Es gibt noch das Setting.Reset, damit werden die vom Benutzer gemachten Änderungen gelöscht und das was der Entwickler in die Settings geschrieben hat wird wiederhergestellt. Das passiert auch direkt auf Datei-Ebene, kann man also im AppData/Local gut beobachten.