Benutzer mit den meisten Antworten
Lexikon erstellen

Frage
-
Hallo zusammen,
ich bin ein Anfänger und versuche für mich ein privates Lexikon zu erstellen. Indem ich ein Begriff in eine Textbox eingebe und auf Search(Button) drücke und eine Ausgabe erhalte. Ich bekomme bei meiner Version aber immer wieder den letzten Text angezeigt. Kann mir da jemand bitte helfen.
namespace WindowsFormsApp1 { public partial class Form1 : Form { public Form1() { InitializeComponent(); } string lukulent, obsolet, Unredlichkeit; private void txtfremdwort_TextChanged(object sender, EventArgs e) { lukulent = ("lichtklar, voll"); obsolet = ("nicht mehr gegebräuchlich; nicht mehr üblich; veraltet; überflüssig"); Unredlichkeit = ("Ist ein Verhalten, dass betrügerisch, unehrlich, unaurfichtig ist."); } private void cmdpush_Click(object sender, EventArgs e) { lblAusgabe.Text = lukulent; lblAusgabe.Text = obsolet; lblAusgabe.Text = Unredlichkeit; } } }
Danke.
Grüße midatra
Antworten
-
Hallo,
vielleicht hilft dir dieses Beispiel etwas weiter. Ein Dictionary ist eine Liste von Schlüssel/Wert-Paaren, die erst einmal einfach zu durchsuchen ist. Im Beispiel wurde es so gewählt, das Groß/Kleinschreibung keine Rolle spielen. Wird ein "Wort" nicht gefunden, wird geprüft, ob es Wörter gibt, die das Suchwort als Teil enthalten.
using System; using System.Linq; using System.Collections.Generic; using System.Windows.Forms; namespace FormDesigner { public partial class Form1 : Form { private Dictionary<string, string> Wörterbuch; public Form1() { InitializeComponent(); txtfremdwort.KeyUp += Txtfremdwort_KeyUp; cmdpush.Click += Cmdpush_Click; Wörterbuch = LadeWörterbuch(); } // Startet die Suche... private void Cmdpush_Click(object sender, EventArgs e) { SetLabel(Suche(txtfremdwort.Text)); } // Bei "Enter" während der Eingabe direkt suchen... private void Txtfremdwort_KeyUp(object sender, KeyEventArgs e) { if ( e.KeyCode == Keys.Enter ) SetLabel(Suche(txtfremdwort.Text)); } // Text an das Label-Control weiterreichen... private void SetLabel(string fundstelle) { if ( !string.IsNullOrWhiteSpace(fundstelle) ) { lblAusgabe.BackColor = System.Drawing.Color.White; lblAusgabe.Text = fundstelle; } else { lblAusgabe.BackColor = System.Drawing.Color.MistyRose; lblAusgabe.Text = "Keine Informationen vorhanden."; } } // Sucht nach einem Wort. private string Suche(string suche) { suche = suche.ToLower(); string ergebnis = string.Empty; Wörterbuch.TryGetValue(suche, out ergebnis); if ( string.IsNullOrWhiteSpace(ergebnis) ) { ergebnis = SucheContains(suche); } return ergebnis; } // Liefert Ergebnis, wenn das Suchwort im Key enthalten ist... private string SucheContains(string suche) { suche = suche.ToLower(); string nl = Environment.NewLine; return string.Join(Environment.NewLine, Wörterbuch .Where(kvp => kvp.Key.Contains(suche)) .Select(kvp => $"{kvp.Key}:{nl} {kvp.Value}{nl}") .ToArray()); } // Diese Methode ist dafür zuständig, das Wörterbuch zu initialisieren. private Dictionary<string, string> LadeWörterbuch() { Dictionary<string, string> wb = new Dictionary<string, string>(); NeuerEintrag(wb, "lukulent", "lichtklar, voll"); NeuerEintrag(wb, "obsolet", "nicht mehr gegebräuchlich; nicht mehr üblich; veraltet; überflüssig"); NeuerEintrag(wb, "Unredlichkeit", "Ist ein Verhalten, dass betrügerisch, unehrlich, unaurfichtig ist."); return wb; } // Einen neuen Eintrag zum Wörterbuch hinzufügen, ggf. aktualisieren... private void NeuerEintrag(Dictionary<string, string> wörterbuch, string key, string value, bool aktualisieren = true) { if ( string.IsNullOrWhiteSpace(key) || string.IsNullOrWhiteSpace(value) || wörterbuch == null ) { throw new ArgumentNullException(); } key = key.ToLower(); // wandelt die Zeichen in Kleinbuchstaben um... if ( wörterbuch.ContainsKey(key) && !aktualisieren ) { throw new ArgumentException($"Schlüssel bereits vorhanden {key}"); } wörterbuch[key] = value.Trim(); } } }
Noch ein paar Empfehlungen für den Anfang:
1.) Die Methoden, die Ereignisse der Controls behandeln (z.B. Button_Click...), sollten möglichst wenig Code enthalten. Das, was passieren soll, immer in eine eigene Methode verlagern.
2.) Änderungen an den Werten eines Controls (z.B. der Text-Eigenschaft des Labels), sollten auch jeweils über eine eigene Methode passieren.
3.) Die Akquise und Bearbeitung der Daten (...des Wörterbuchs) sollte auch in eigenen Methoden umgesetzt werden.
Gruß
- Als Antwort vorgeschlagen Dimitar DenkovMicrosoft contingent staff, Administrator Donnerstag, 28. Dezember 2017 06:57
- Als Antwort markiert Dimitar DenkovMicrosoft contingent staff, Administrator Freitag, 5. Januar 2018 14:41
Alle Antworten
-
Hi,
ist ja auch kein Wunder. Du weist lblAusgabe.Text drei mal einen Wert zu. Der zuerst zugewiesene Wert wird daher also von der zweiten Zuweisung überschrieben, die dann wiederum von der dritten Zuweisung.
Was man in deinem Code ändern sollte, kann ich dir nicht sagen, da ich nicht wirklich verstanden habe, was da bei dir wo und wie gesucht und ausgegeben werden soll. Beschreib das mal bitte genauer.
Gruß, Stefan
Microsoft MVP - Visual Developer ASP/ASP.NET
http://www.asp-solutions.de/ - Consulting, Development
http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community
- Bearbeitet Stefan FalzModerator Donnerstag, 21. Dezember 2017 12:12
-
Hallo,
vielleicht hilft dir dieses Beispiel etwas weiter. Ein Dictionary ist eine Liste von Schlüssel/Wert-Paaren, die erst einmal einfach zu durchsuchen ist. Im Beispiel wurde es so gewählt, das Groß/Kleinschreibung keine Rolle spielen. Wird ein "Wort" nicht gefunden, wird geprüft, ob es Wörter gibt, die das Suchwort als Teil enthalten.
using System; using System.Linq; using System.Collections.Generic; using System.Windows.Forms; namespace FormDesigner { public partial class Form1 : Form { private Dictionary<string, string> Wörterbuch; public Form1() { InitializeComponent(); txtfremdwort.KeyUp += Txtfremdwort_KeyUp; cmdpush.Click += Cmdpush_Click; Wörterbuch = LadeWörterbuch(); } // Startet die Suche... private void Cmdpush_Click(object sender, EventArgs e) { SetLabel(Suche(txtfremdwort.Text)); } // Bei "Enter" während der Eingabe direkt suchen... private void Txtfremdwort_KeyUp(object sender, KeyEventArgs e) { if ( e.KeyCode == Keys.Enter ) SetLabel(Suche(txtfremdwort.Text)); } // Text an das Label-Control weiterreichen... private void SetLabel(string fundstelle) { if ( !string.IsNullOrWhiteSpace(fundstelle) ) { lblAusgabe.BackColor = System.Drawing.Color.White; lblAusgabe.Text = fundstelle; } else { lblAusgabe.BackColor = System.Drawing.Color.MistyRose; lblAusgabe.Text = "Keine Informationen vorhanden."; } } // Sucht nach einem Wort. private string Suche(string suche) { suche = suche.ToLower(); string ergebnis = string.Empty; Wörterbuch.TryGetValue(suche, out ergebnis); if ( string.IsNullOrWhiteSpace(ergebnis) ) { ergebnis = SucheContains(suche); } return ergebnis; } // Liefert Ergebnis, wenn das Suchwort im Key enthalten ist... private string SucheContains(string suche) { suche = suche.ToLower(); string nl = Environment.NewLine; return string.Join(Environment.NewLine, Wörterbuch .Where(kvp => kvp.Key.Contains(suche)) .Select(kvp => $"{kvp.Key}:{nl} {kvp.Value}{nl}") .ToArray()); } // Diese Methode ist dafür zuständig, das Wörterbuch zu initialisieren. private Dictionary<string, string> LadeWörterbuch() { Dictionary<string, string> wb = new Dictionary<string, string>(); NeuerEintrag(wb, "lukulent", "lichtklar, voll"); NeuerEintrag(wb, "obsolet", "nicht mehr gegebräuchlich; nicht mehr üblich; veraltet; überflüssig"); NeuerEintrag(wb, "Unredlichkeit", "Ist ein Verhalten, dass betrügerisch, unehrlich, unaurfichtig ist."); return wb; } // Einen neuen Eintrag zum Wörterbuch hinzufügen, ggf. aktualisieren... private void NeuerEintrag(Dictionary<string, string> wörterbuch, string key, string value, bool aktualisieren = true) { if ( string.IsNullOrWhiteSpace(key) || string.IsNullOrWhiteSpace(value) || wörterbuch == null ) { throw new ArgumentNullException(); } key = key.ToLower(); // wandelt die Zeichen in Kleinbuchstaben um... if ( wörterbuch.ContainsKey(key) && !aktualisieren ) { throw new ArgumentException($"Schlüssel bereits vorhanden {key}"); } wörterbuch[key] = value.Trim(); } } }
Noch ein paar Empfehlungen für den Anfang:
1.) Die Methoden, die Ereignisse der Controls behandeln (z.B. Button_Click...), sollten möglichst wenig Code enthalten. Das, was passieren soll, immer in eine eigene Methode verlagern.
2.) Änderungen an den Werten eines Controls (z.B. der Text-Eigenschaft des Labels), sollten auch jeweils über eine eigene Methode passieren.
3.) Die Akquise und Bearbeitung der Daten (...des Wörterbuchs) sollte auch in eigenen Methoden umgesetzt werden.
Gruß
- Als Antwort vorgeschlagen Dimitar DenkovMicrosoft contingent staff, Administrator Donnerstag, 28. Dezember 2017 06:57
- Als Antwort markiert Dimitar DenkovMicrosoft contingent staff, Administrator Freitag, 5. Januar 2018 14:41