Forms - Auflistungen Properties Methoden usw

19/11/2008 - 17:06 von Peter Kleinholz | Report spam
Hallo


Ich habe mir eine Anwendung geschrieben, die per SysTray diverse Tools in
einem Kontextmenü anbietet.

Beim Start macht das Main-Form eigentlich nichts anderes, als die
Tools-Forms zu untersuchen, Public-Vars abzurufen, Tools-Initialisierungen
zu starten, Kontextmenüeintràge zu erweitern und den Status der Tools
abzufragen.

Dabei ist der Code im Main-Form pro Tool immer gleich. Um die Arbeit zu
erleichtern, habe ich in den Tools-Forms immer gleiche Public-Vars (Name,
Version), -Subs (Start, Init, Stopp, Beenden) und -Funktionen (Status)
eingebaut. Das gilt zumindest für den Start-, Anzeigen- und
Beenden-Vorgang. Das sind alles nur Beispiele.. es gibt noch mehr
Funktionalitàt.

Mein Problem ist nun folgendes: Ich entwerfe so viele neue Tools (die ich
alle hin und wieder verwende), daß ich zunehmend genervt davon bin, bei
jedem neuen Tool den ganzen 'Standard'-Code im Main-Form kopieren und
anpassen zu müssen. Inzwischen habe ich es so weit optimiert, daß sich das
zwar in Grenzen hàlt, aber es sind trotzdem noch zu viele Stellen, die
angepasst werden müssen. Und als quasi Ordnungs-Fan hasse ich es,
kilometerweise den immer gleichen Code zu kopieren und einzufügen. Auch
bei spàteren Änderungen am Code stellen sich mir die Nackenhaare auf, wenn
ich dran denke den kompletten Code überarbeiten zu müssen.

Aus dem Grund habe ich schon öfters den Versuch gestartet, das Ganze
irgendwie abzukürzen, in Schleifen zu packen, Forms-Auflistungen zu
durchlaufen oder anders zu automatisieren. Muss dazu sagen, daß ich bisher
die Arbeit mit VB6 gewohnt war. Dort funktionierte es etwas (will sagen)
komfortabler mit den Forms-Auflistungen und man konnte z.B.
Forms("Form2").Load (oder àhnlich) verwenden, um ein Form zu laden, aber
noch nicht gleich anzuzeigen. Dadirch konnte man in Schleifen mehrere
Forms durchlaufen und in den Forms Code ausführen). Bei VB2008 gibts
OpenForms, aber dort werden nur bereits geladene Forms gelistet. Bis ich
den Dreh raus hatte, die Tools-Forms mit 'Me.OnLoad(Nothing)' per manuell
aufgerufener Prozedur aus dem Main-Form zu laden und somit in OpenForms
anzuzeigen... das war ein kleiner Krampf. Ausserdem hat
'OpenForms("xy").Name' offensichtlich das Problem, daß dort oft kein Name
hinterlegt ist, will sagen .Name ist leer - wàhrend zum selben Zeitpunkt
z.B. .Text bereits den entsprechenden Text enthàlt. Warum auch immer.. ich
muss jedenfalls im Tools-Form unter OnLoad noch 'Me.Name =
MyPublicVar_ToolKurzName' notieren.

Gut, inzwischen habe ich es soweit, daß ich im Main-Form lediglich jedes
einzelne Tools-Form per 'Form_ToolX.MyInit' (worin 'Me.OnLoad(Nothing)'
notiert ist) lade und danach in Schleifen auf OpenForms zugreifen kann.
Eine ganze Menge an Standard Code aus den Tools-Formen konnte ich so in
eine Klasse packen und zentral immer wieder aufrufen. Das ist schon mal
super. Ebenfalls kann ich dadurch die Kontextmenü-Klicks bzw deren
Auswertung (z.B. 'Form_ToolX.Show' bzw 'OpenForms(Index).Show')
vereinfachen.

Das _wirkliche_ Problem besteht nun darin, daß ich mit OpenForms oder (in
Schleifen oder auch einzeln) 'Dim X as Form = .OpenForms(Index)' oder
direkt 'Dim X as Form = Form_ToolX' oder 'Dim X as Form = New Form_ToolX'
nicht auf die in den Tools notierten Public Vars, Subs und Funktionen
zugreifen kann, weil mir der Compiler stàndig meldet, daß eben diese nicht
Mitglied der Forms-Klasse seien. Soweit kann ich das nachvollziehen.

Nun habe ich in MSDN gelesen, daß man den My Namespace erweitern kann. Und
ich trage mich mit der Hoffnung schwanger, daß dies irgendwie auch mit der
Forms-Klasse möglich sein könnte. Daher meine Frage an euch: Kann ich es
einrichten, daß in Form_TEST 'Public MyBool as Boolean = True' notiere und
von einer anderen Form aus per OpenForms oder einer Instanz auf
Instance.MyBool zugreifen kann? Gleiches gilt dann natürlich auch für Subs
und Functions usw.

Wenn das nicht geht.. gibt es sonst eine Möglichkeit den Error-Handler
irgendwie zu unterbrechen, damit der Code auf Object.MySub oder
Forms.MySub ohne Fehler zugreifen kann? Ich meine, ich kann nicht mal die
Anwendung im Compiler starten, weil dann der fehler gemeldet wird.

Oder gibt es sonst irgendeine Möglichkeit? Mir wàre es auch egal, wenn ich
dazu massig Code im Main-Form einbauen muss oder dazu die ganzen Forms usw
abàndern müsste. Hauptsache ich brauche ein neues Tool nur an einer Stelle
im Main-Form notieren und die Sache làuft.


Grüße
 

Lesen sie die antworten

#1 Peter Kleinholz
19/11/2008 - 17:16 | Warnen spam
P.S.: Mir würde auch genügen, wenn ich vom Main-Form aus eine Methode
Prozedur in den Tools aufrufen könnte, die in der Forms-Klasse enthalten
ist (wie z.B. .FormClosing, .Load, .Main). Wenn das ginge, könnte die
entsprechende Prozedur bei dem Main-Form 'nachfragen', was zu tun ist und
entsprechend handeln.

Gibts da vielleicht eine Methode, die ich 'missbrauchen' könnte?

Ähnliche fragen