Autor Beitrag
Roux
Hält's aus hier
Beiträge: 15



BeitragVerfasst: So 08.04.12 13:34 
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.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: So 08.04.12 15: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

_________________
Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
Roux Threadstarter
Hält's aus hier
Beiträge: 15



BeitragVerfasst: So 08.04.12 18: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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 4708
Erhaltene Danke: 991


VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
BeitragVerfasst: So 08.04.12 20: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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 4798
Erhaltene Danke: 1059

Win10
C#, C++ (VS 2017/19/22)
BeitragVerfasst: So 08.04.12 20: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 (bzw. UserControls und/oder Klassen) an (inkl. Beispielprogramm ganz unten auf der Seite).