Zugriff auf ein Element von mehreren unterschiedlichen Formularen

multitasker

Mitglied
VB.NET

Hallo,
ich finde leider nicht den richtigen Lösungsansatz. Vielleicht kann mir einer von euch helfen.
Ich habe mehrere Formular. Diese haben einige Steuerelemente, die auf jedem Formular vorhanden sind, plus noch spezielle für jedes Formular. Da einige bei jedem vorhanden sind, habe ich ein Basisformular erstellt, von dem jedes Formular erbt.

Soweit so gut. Nun habe ich eine Art ListView in dem Basisformular / Template, das eine Filtereigenschaft hat. Über ein zusätzliches (nicht das Basisformular oder ein geerbetes) möchte ich auf die Filtereigenschaft zugreifen und diesen Filter verändern. Dieser Filter soll sich dann auf alle geerbten Formulare auswirken.

1. Frage:
Zentral kann ich diese Eigenschaft ja nicht ändern, da ja jedes geerbte Formular auch jedes ein eigenes ListView hat, oder?

2. Frage:
Da jedes Formular noch seine spezifischen Elemente hat, kann ich die Formulare ja nicht mit einer einfachen For-Schleife durchlaufen und das ListView in ihnen ansprechen. Gibt es eine elegante Möglichkeit auf ein gleiches Element zuzugreifen, das in mehrere unterschiedlichen Formularen (oder Klassen im Allgemeinen) sich befindet.

Gruß Jens
 
Hallo,

mach das Control doch einfach public (der Designer hat sogar eine Eigenschaft "Modifier", die einfach auf Public stellen), dann kannst du von außen drauf zugreifen.

Edit: Und um den Filter in allen Forms zu setzen, einfach alle Forms durchlaufen und das für jedes eben machen.

MfG
Fabsch
 
Hallo Fabsch,
das Problem ist nicht der Zugriff auf das Element an sich. Das ListView habe ich als "Public" deklariert.
Mit dem was du als Edit angefügt hast kommen wir aber genau auf den Punkt. Wie kann ich alle Forms durchlaufen, wenn die Forms unterschiedlich sind -sprich nicht den selben Datentyp haben / Klasse sind. Alle Forms sehen unterschiedlich aus und alloziieren unterschiedlichen Speicher.

Einfaches Beispiel:
Hier geht es mit einer Schleife:
Dim Form1 as Formular
Dim Form2 as Formular
Dim Form3 as Formular

For each form as Formular
......
End for

Aber was mache ich, wenn
Dim Form1 as FormularX
Dim Form2 as FormularY
Dim Form3 as FormularZ




Gruß Jens
 
In der For Each-Schleife kannst du ja als Typ die Basisklasse angeben.
Falls du den Klassentypen brauchst bzw auf Eigenschaften z.B. der Klasse FormularX zugreifen willst, kannst du ja für jede Klasse, die von der Basisklasse abgeleitet ist, überprüfen:

Visual Basic:
For Each form As Formular In forms
    If TypeOf form Is FormularX Then
        ' Klasse FormularX
        Dim x As FormularX = DirectCast(form, String)
    End If
Next

Ich finde meine Lösung zwar nicht allzu gut, aber mir fällt gerade nichts anderes ein.
 
Hier ist das grundsätzliche Softwaredesign falsch.

Du solltest dir ein Pattern á la MVC etc. überlegen bzw. dich damit auseinander setzen. Direkte Zugriffe auf Formulare etc. sind in der Regel schlecht. Wenn du dir schon kein solches Pattern implementieren möchtest, dann solltest du die Filtereigenschaften in einem Objekt ablegen, das von allen Formularen aus zugänglich ist.
 
Hallo Norbert,
ja das stimmt schon mit dem Design - mir gefällt es auch nicht. Wenn ich nun in jedem Formular eine Funktion erstelle, um die Filtereigenschaft anzupassen, was gebe es denn für eine elegante Möglichkeit diese Funktionen aufzurufen?

Wenn drei Formulare vorhanden sind, ist dies natürlich kein Aufwand die drei Funktionen untereinander zu schreiben, ich würde das jedoch gerne in einer Schleife oder so ähnlich machen. Die Formulare, in denen die Funktionen aufzurufen sind, fangen bei mir mit F_ an.

Gruß Jens
 
Ich bin kürzlich auf das Thema Schnittstellen gestoßen. Wäre das nicht ein guter Ansatz, oder ist das wie mit Kanonen auf Spatzen schießen. Im Moment würe ich ja nur eine Funktion benötigen, die dann in der Schnittstelle defniert ist.
 
Zurück