Wie Methoden zwischen verschiedenen Windows teilen, die auf Textfelder zugreifen?

Noch einmal genauer was ich meine…

Ich habe zwei Windows mit jeweils den gleichen Objekten (Textfelder). Dazu gibt es ebenso einige Methoden die auf diese Textfelder zugreifen.
Wenn ich die Methoden in ein Modul auslagere und die Referenz des jeweiligen Window ( self ) als Parameter vom Typ Window übergebe, bremst mich spätestens der Compiler ein, der vollkommen zurecht behauptet das meine Textfelder nicht Bestandteil der Klasse Window sind.

Seht Ihr eine Möglichkeit zu verhindern, dass ich den gleichen Code in beide Windows kopiere…
(Den Code zu verwerfen und neu zu designen, um den Zugriff auf die Textfelder zu entfernen, ist leider keine Option…)

Beispiel:

Methode in einen Modul:

testmethode( win as Window )
win.textfield1 = “test”
return

Aufruf in einem der Windows

testmethode( self )

Im voraus vielen Dank…

Ralf

Verwende die Syntax Extends w As Window zu Begin der Parameter Definition in der Methode. Dann kannst Du mittels “w” anstelle von “self” auf das Window Objekt zugreifen.

Die Methode wird dann z.B. mit Window.MethodenName angesprochen.
Je nach Anforderung, macht es evtl. Sinn, die Daten der Textfelder an die Methode zu übergeben.

Hallo,
alternativ könnte man eine neue Klasse (z.B. „myTextField“) anlegen mit dem Super „TextField“. In der Klasse „myTextField“ kann man dann die benötigten Methoden (z.B. „testmethode“), Properties usw. anlegen.
Anschließend zieht man beliebig viele Textfelder (z.B. „TextField_1“, „TextField_2“ usw.) auf beliebige Fenster und ändert ihre „Super“-Eigenschaft von „TextField“ auf „myTextField“. Nun kann man die „testmethode“ innerhalb eines Fensters z.B. mit TextField_1.testmethode aufrufen.

Vielen Dank, Sascha und Christian für eure Vorschläge und Denkanstösse.
Ich habe damit herum experimentiert, bin aber meinem Ziel leider nicht näher gekommen. Gerade der für mich wichtige Punkt, dass ich aus einer Modul Methode heraus auf ein Textfeld in einem Objekt der Klasse Window zugreifen kann, den konnte ich damit nicht lösen. Vermutlich wird der einzig gangbare Weg Introspection sein…

Trotzdem rechtherzlichen Dank…

Ralf

Hallo,
wenn es über ein Modul gehen soll: Wenn die Textfelder auf einem Fenster sind, dass z.B. den Namen „myWindow“ hat, dann müsste der Methodenaufruf so lauten:

Methode in einen Modul:

testmethode(win as myWindow ) win.textfield1.Text = "test" return

Wenn also alle Fenster solche „myWindow“ sind, d.h. sie werden alle über

dim w as new myWindow w.Show
erzeugt werden, dann sollte das funktionieren.

Oder aber so:
Lege eine Klasse in deinem Projekt an mit dem Super Window.
Gib ihr eine Methode

Public Shared Sub setText(ControlName As String, Assigns Value as String) dim NumberofControls as integer = ControlCount -1 For q As Integer = 0 To NumberofControls Dim c As Control = Control(q) If c.Name = ControlName Then If c IsA TextField Then TextField(c).Text = value End If Return End If Next End Sub

(Und erweitere sie ggf. mittels ElseIf auf andere Control-Klassen, die du dann wiederum auf c castest und Value ihrer entsprechenden Eigenschaft – beim Button wär’s ja z.B. Caption statt Text – zuweist. )

Dann lass deine Windows nicht mehr auf Window basieren, sondern auf der neuen Klasse.

Dann geht von überall ein Aufruf der Art

window1.setText("TextField1") = "Hello World!"