alegria hat folgendes geschrieben : |
| Puh! Harter Tobakkk!!! Also ich hab zwar versucht zu verstehen was Du meinst, aber richtig schlau draus geworden bin ich leider nicht... Für mich klingt das nicht schlüssig weil ich halt nicht weiss wie ich bspw. Nr 1 praktisch umsetzen soll!? |
Grundstruktur sollte etwas sein wie dieses:
C#-Quelltext
1: 2: 3:
| public class BaseForm : Form { ... } public class Form1 : BaseForm { ... } public class Form2 : BaseForm { ... } |
In
BaseForm (!) wäre ein
DataGridView und
MyMethod enthalten, vermutlich jeweils als protected deklariert. In Form1 und Form2 steuerst Du, soweit erforderlich, die jeweilige DataSource. Dann kannst Du in jedem der abgeleiteten Formulare direkt MyMethod aufrufen und bist sicher, dass das jeweils aktive DGV benutzt wird.
Inwieweit das sinnvoll ist, möchte ich wirklich bezweifeln. Denn die Maßnahmen, die Du dort skizziert hast, beziehen sich wohl auf die tatsächlich benutzten Daten; und dann wird das wird unübersichtlich oder inkonsistent. Deshalb dürfte Th69's 2. Variante besser sein.
alegria hat folgendes geschrieben : |
| Ich geb mal bissl Code - vielleicht ist das leichter wenn man der theoretischen abstraktionsebene etwas praktisches beimischt... |
Danke, aber das Problem hatte ich schon bei der ersten Beschreibung verstanden.
alegria hat folgendes geschrieben : |
| // HIER LIEGT PROBLEM - NEW macht halt NEW und nicht bestehendes.... |
Eben: Du musst das bestehende Formular holen. Mit
ActiveForm geht es etwa so:
C#-Quelltext
1: 2: 3: 4: 5: 6:
| DataGridView current_dgv; if (ActiveForm == this) current_dgv = this.dgv_Form1; else if (ActiveForm is Form2) current_dgv = (ActiveForm as Form2).dgv_Form2; else if |
Aber beachte, dass die DGVs entsprechend als internal deklariert werden müssen, damit sie zur Verfügung gestellt werden können. Auch hier gilt wieder: es wird unübersichtlich.
Mit
OpenForms könntest Du es so lösen, aber dann sollten alle DGVs gleich heißen und müssten ebenfalls als internal deklariert werden:
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10:
| DataGridView current_dgv = null; foreach(Form frm in Application.OpenForms) { if (frm is ActiveForm) { Control[] items = frm.Controls.Find("DGV", true); if (items.Count == 1) { current_dgv = items[0] as DataGridView; break; } } } |
alegria hat folgendes geschrieben : |
:: und in FORM2 (was wohl so vom Aufruf her richtig ist?) ::
C#-Quelltext 1: 2:
| Form1 frmForm1 = new Form1(); frmForm1.myMethod(1); | |
Nein, das ist ziemlich abwegig: Zum einen wird ein neues Form1 erzeugt und nicht das vorhandene benutzt; dann benutzt Du diese Instanz nur wegen dieser Methode; die "gemeinsame" Methode steht irgendwo, aber nicht dort, wo sie benötigt wird.
Ich kann also auch nur betonen:
Th69 hat folgendes geschrieben : |
Also, dein Weg ist nicht so toll... So hast du Abhängigkeiten zwischen den Formularen, die nicht sein sollten.
Je nachdem, ob deine "Verarbeitung"-Methode nur reine GUI-Aufgaben oder aber auch Logik beinhaltet, solltest du evtl. eine eigene Logik-Klasse erzeugen.
Die Trennung von GUI und Logik (und evtl. noch Datenzugriff) ist elementar für jedes gute Programm! |
Vielleicht solltest Du beschreiben, was Du in myMethod eigentlich erledigen willst. Dann können wir konkrete Vorschläge machen. Jürgen