Entwickler-Ecke
Basistechnologien - Verständnisfrage: Zugriff auf UserControls
Roux - So 08.04.12 12:34
Titel: Verständnisfrage: Zugriff auf UserControls
Hallo,
ich habe zwei UserControls. Beide werden auf dem "Hauptformular" Form1 erstellt. In beiden UserControls habe ich eine ComboBox, in der er sich aus einer Datenbank Einträge läd. Bisher habe ich nur die UserControl1 erstellt und dort das Laden der Einträge programmiert.
Jetzt bin ich bei UserControl2 und ich brauche ja sozusagen (ziemlich, bis auf Name der Combobox) den gleichen Code. Es scheint mir aber schlecht programmiert, den Code rüber zu kopieren und 2x fast identisch im Programm zu haben. Frage: Kann ich den Code irgendwo zentral als Methode auslagern?
Viele Grüße
Roux
Christian S. - So 08.04.12 14:06
Hallo!
Wieso muss die Combobox anders heißen? Der Name sollte doch eigentlich wurscht sein und dann könntest Du dasselbe UserControl benutzen.
Grüße,
Christian
Roux - So 08.04.12 17:27
Der Name könnte schon gleich sein. Das selbe UserControl kann ich aber nicht verwenden, da auf dem UserControl noch mehr Objekte sind, die sich unterscheiden.
Kann ich denn innerhalb meiner UserControl.cs auf eine Methode von der Form1.cs zugreifen? Bisher gelang mir das noch nicht. Ist mir ja insofern auch logisch, es wird eine Instanz der Hauptform Form1 erstellt und dort wird eine Instanz von UserControl erstellt. Von Form1 kann ich auf alle zugreifen, umgekehrt kann ich aber nicht von der UserControl-Instanz auf Form zugreifen.
Wenn ich eine komplett neue Klasse erstelle - kann ich dort bewirken, dass ich auf die Objekte der Form1 zugreifen kann?
Viele Grüße
Roux
Ralf Jansen - So 08.04.12 19:46
| Zitat: |
| Kann ich den Code irgendwo zentral als Methode auslagern? |
Klar. Ein UserControl ist auch nur eine Klasse die ~zufällig~ ein grafische Repräsentation hat. Also mach das zum Beispiel per Vererbung. Programmier dir ein gemeinsames UserControl wo der allgemeine Teil drin programmiert ist und leite dann zwei Usercontrols davon ab. Oder wenn der ähnliche/gleiche Code sich gar nicht auf den grafischen Teil bezieht lagere den Code in eine Stinknormale andere Klasse aus und verweise vom UserControl auf diese Klasse. Der Möglichkeiten sind da viele.
| Zitat: |
| Wenn ich eine komplett neue Klasse erstelle - kann ich dort bewirken, dass ich auf die Objekte der Form1 zugreifen kann? |
Letztlich brauchst du nur einen Verweis auf die jeweils andere Klasse die du benutzen willst das müsstest du halt nur so programmieren du bekommst es nicht einfach geschenkt. Aber ein Control das auf die Form zugreift auf der es liegt ist eine schlechte Idee. Ein Control/UserControl ist ja eine möglichst allgemeine Geschichte die an beliebige Stelle auf eine beliebigen Form oder anderen Control eingesetzt werden könne soll. Wenn das UserControl auf ein spezielle Form zugreift kann es dann auch nur noch auf dieser Form eingesetzt werden. Dann kann man sich das UserControl auch gleich sparen und den Inhalt des UserControl so auf die Form werfen. Das UserControl wäre ja eh nie an andere Stelle einsetzbar und die Wiederverwendbarkeit des Controls konvergiert gegen null.
Th69 - So 08.04.12 19:55
Hallo Roux,
Datenbankanbindung sollte niemals direkt im GUI-Code (egal of Form oder UserControl) programmiert sein, sondern immer über eine eigene Datenschicht (DataLayer) passieren, d.h. erstelle dafür eigene Klassen (Stichwort: Schichtentrennung).
Zum vernünftigen Zugriff untereinander schau dir mal meinen Artikel
Kommunikation von 2 Forms [
http://www.bitel.net/dghm1164/programming/Kommunikation_von_2_Forms.html] (bzw. UserControls und/oder Klassen) an (inkl. Beispielprogramm ganz unten auf der Seite).
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!