Earn More by Sharing What You Love
Do you create content for developers working with .NET, C#, Java, Python, or Node.js? Turn your expertise into extra income!

Tim Corey
46m 06s
In diesem Artikel werden wir einen tieferen Blick auf die C#-Anwendungsentwicklung werfen, indem wir Tim Coreys Lektion 13 aus seiner Serie "C# App Start to Finish" folgen. Tim führt uns durch den Prozess der Erstellung einer funktionalen Windows Forms-Anwendung und konzentriert sich darauf, wie man UI-Steuerelemente wie Kombinationsfelder, Listenfelder und Schaltflächen mit Daten verbindet. Diese Lektion demonstriert Schlüsselkonzepte wie Datenbindung, Listenverwaltung, Datenbankverbindungen mit Dapper und grundlegende Validierung und Debugging — alles wesentliche Fähigkeiten zum Aufbau realer C#-Anwendungen.
Tim beginnt damit, uns daran zu erinnern, dass Lektion 13 eine Fortsetzung des vorherigen Videos ist, in dem der Abschnitt "Add New Member" verbunden wurde. In dieser Lektion erklärt Tim, dass das Hauptziel darin besteht, das Dropdown (Kombinationsfeld) und das Listenfeld zu verbinden und dann das neu erstellte Personenobjekt so zu verknüpfen, dass es in der Liste erscheint. Tim legt den Plan klar fest: Diese Lektion wird sich auf die Verkabelung der UI, die Datenbewegung und die Synchronisierung der Liste konzentrieren — fundamentale Aspekte beim Aufbau einer C#-Desktop-Anwendung.
Tim erklärt, dass hinter dem Kombinationsfeld und dem Listenfeld eine Liste von Personenobjekten stehen wird. Dies ist ein klassisches Beispiel für Datenbindung in Windows Forms, bei der UI-Elemente an Sammlungen von Datenmodellen gebunden sind.
Er erstellt zwei private Listen auf Klassenebene:
availableTeamMembers – die Personen, die zum Team hinzugefügt werden können
selectedTeamMembers – die Personen, die bereits dem Team hinzugefügt wurden
Tim klärt das erwartete Verhalten: Wenn eine Person aus dem Dropdown ausgewählt und hinzugefügt wird, sollte sie von availableTeamMembers zu selectedTeamMembers wechseln. Dies ist ein standardmäßiges CRUD-Operationsmuster in der Desktop-Anwendungsentwicklung, bei dem die UI die zugrunde liegenden Daten widerspiegelt.
Tim geht auf eine häufige Designfrage ein: "Warum nicht Teammitglieder basierend auf dem Turnier einschränken?" Er erklärt, dass das Formular 'Create Team' nicht direkt an ein Turnier gebunden ist und mehrere Turniere gleichzeitig laufen könnten.
Tim verwendet ein praktisches Beispiel: Wenn sowohl ein Basketballturnier als auch ein Tischtennisturnier laufen, könnte eine Person an beiden teilnehmen. Das Begrenzen des Dropdown würde komplexe Logik erfordern und könnte Fehler einführen. Stattdessen wählt Tim einen einfacheren Ansatz:
Dieser Ansatz demonstriert eine praxisnahe Software-Design-Entscheidung: Vermeiden Sie Überkomplexität, es sei denn, es ist erforderlich.
Tim erstellt eine Methode namens WireUpLists, um die Listen mit UI-Steuerelementen zu verbinden. Diese Methode bindet die Liste availableTeamMembers an das Kombinationsfeld und die Liste selectedTeamMembers an das Listenfeld.
Tim weist auf eine wichtige Verbesserung hin: In modernen Windows Forms können Sie Listen direkt an Steuerelemente binden, ohne eine separate BindingSource zu verwenden. Dies ist ein hilfreicher Tipp für Entwickler, die an der Datenbindung von Windows Forms arbeiten.
Tim erklärt, dass das Kombinationsfeld einen lesbaren Namen anzeigen muss. Die DisplayMember-Eigenschaft erwartet eine Zeichenfolgeigenschaft aus dem Personmodul. Tim warnt, dass die Verwendung von nur Vorname oder Nachname Duplikate verursachen kann.
Also erstellt Tim eine schreibgeschützte Eigenschaft namens FullName:
public string VollständigerName
{
get
{
return "${FirstName} ${LastName}";
}
}
Dies demonstriert eine wichtige UI-Praxis: Stellen Sie immer sicher, dass Ihre UI benutzerfreundliche Informationen anzeigt, nicht Rohdatenobjekte.
Tim erstellt eine Methode namens CreateSampleData, um die Listen und die UI zu testen. Er fügt beiden Listen Beispielpersonenobjekte hinzu und ruft WireUpLists im Konstruktor auf.
Dies ist eine nützliche Technik, um Windows Forms-Anwendungen schnell zu erstellen und zu testen, bevor sie mit einer echten Datenbank verbunden werden.
Tim kommentiert die Beispieldaten aus und bereitet sich darauf vor, echte Daten zu laden. Er fügt eine Methode GetPerson_All zur IDataConnection-Schnittstelle hinzu. Tim erklärt seine Namenskonvention:
Create = einfügen
Get = auswählen
Dies ist eine standardmäßige Namensstrategie für Datenschichten in C#-Anwendungen.
Tim implementiert die SQL-Version von GetPerson_All mit Dapper und einem gespeicherten Verfahren:
connection.Query<PersonModel>("spPeople_GetAll").ToList();
Tim verwendet absichtlich eine Ausgabeveriablen anstelle einer direkten Rückgabe, um das Debuggen zu erleichtern. Dies zeigt, dass Debugging-Praktiken das Code-Design beeinflussen können.
Tim bemerkt wiederholte Namen von Verbindungszeichenfolgen und ändert diese in eine Konstante. Er erklärt, dass Wiederholungen schlechte Praxis sind und später Fehler verursachen können.
Dies ist ein wichtiges Software-Engineering-Prinzip: DRY (Don't Repeat Yourself).
Tim erstellt LoadListData() und füllt availableTeamMembers mit GetPerson_All(). Die Liste selectedTeamMembers bleibt leer, was korrekt ist, da ein neues Team leer startet.
Dies zeigt, wie man die UI mit echten Datenquellen verbindet, sei es eine Datenbank oder eine Textdatei.
Tim erstellt das Ereignishandler des Schalters Add Member. Die Logik ist:
Ausgewählte Person aus dem Dropdown abrufen
Sie von der verfügbaren Liste entfernen
Sie zur ausgewählten Liste hinzufügen
Die UI aktualisieren
Tim erklärt, dass das ausgewählte Element in PersonModel umgewandelt werden muss, da das Kombinationsfeld Objekte als object speichert. Dies hebt die Bedeutung von Typumwandlung und Objektverarbeitung in C# hervor.
Tim stellt fest, dass die UI sich nicht aktualisiert, nachdem Elemente verschoben wurden. Nach dem Debuggen findet er die Lösung:
Setze DataSource auf null
Dann die Liste neu zuweisen
Dies zwingt das Kombinationsfeld und das Listenfeld zur Aktualisierung. Tim betont, dass Debugging-Fähigkeiten entscheidend sind und oft erforderlich sind, um zu verstehen, wie sich die Datenbindung verhält.
Tim benennt den Schalter in Remove Selected um und erstellt den Ereignishandler. Dies kehrt den Hinzufügevorgang um:
Entfernen aus selectedTeamMembers
Zurückfügen zu availableTeamMembers
UI aktualisieren
Tim entdeckt einen Fehler: Wenn kein Element ausgewählt ist, wird ein Nullwert hinzugefügt. Er fügt eine Validierung hinzu:
if (p != null)
{
// fortfahren
}
Dies zeigt grundlegende Validierung und Fehlervermeidung.
Tim betont, Ihre Anwendung zu testen wie ein Benutzer, der sie zu zerstören versucht. Er rät, Tester zu haben, die absichtlich versuchen, die App zu zerstören, da echte Benutzer unerwartete Aktionen ausführen werden.
Dies ist eine wichtige Lektion für den Bau zuverlässiger Software.
Tim modifiziert den Schalter 'Create Member', um eine neue Person im Datenspeicher zu speichern und sie sofort zur ausgewählten Liste hinzuzufügen. Dies demonstriert, wie man CRUD-Operationen in einer Windows Forms-Anwendung implementiert.
Tim merkt, dass die Textversion von GetPerson_All fehlt. Er implementiert es mit einer einfachen Zeile:
return PeopleFile.FullFilePath.LoadFile().ConvertToPersonModels();
Dies zeigt, dass dateibasierte Speicherung leicht implementiert werden kann, ohne komplexe Logik.
Tim führt die App aus und bestätigt, dass das Dropdown jetzt Personen aus der Textdatei und der Datenbank lädt. Er fügt neue Personen hinzu und sieht sie sofort auftauchen, was zeigt, dass das gesamte System richtig funktioniert.
Tim schließt ab, indem er erklärt, dass sich das nächste Video auf die Erstellung des Teams selbst konzentrieren wird. Dies beinhaltet das Speichern mehrerer Datenteile in die Datenbank oder Textdatei und vervollständigt das Feature.
Tim Coreys Lektion 13 ist ein praxisnahes Beispiel für die Entwicklung von C# Windows Forms-Anwendungen. Von der Verkabelung von UI-Steuerelementen und Datenbindung bis hin zu Debugging und Validierung lehrt Tim praktische Programmierfähigkeiten zur Erstellung echter Desktop-Anwendungen. Diese Lektion ist besonders wertvoll für Entwickler, die Datenbindung, Dapper, SQL-CRUD-Operationen und UI-gesteuerte Programmierung in C# lernen möchten.
Wenn Sie weiter lernen möchten, wird Tims nächste Lektion das Team-Erstellungs-Feature vervollständigen und alles zu einer funktionierenden Anwendung zusammenbringen.
Do you create content for developers working with .NET, C#, Java, Python, or Node.js? Turn your expertise into extra income!
Join our newsletter, you’ll get exclusive access on article updates. We value your privacy