Forms korrekt schließen

Hallo liebes Forum,

Ich habe folgendes Problem: Ich habe in visual basic 2005 express eine form geladen, soweit so gut. nun gibt der nutzer des programms einen wert in ein textfeld der form ein, worauf sich eine 2. form öffnet (ein kleineres fenster, das sich nur partiell über die erste form legt, also eine Art Messagebox ersatz). Nun möchte ich Folgendes: Wenn der User die kleinere 2. Form schließt, soll er zur ersten From zurückkehren (was auch funktioniert, da sie ja nur im Hintergrund lag). Ich möchte jedoch, dass die Befehlle, die in der Sub Form_Load der ersten Form stehen ausgeführt werden. Das lässt sich leider nicht mit form.show machen. Wenn ich dagegen die erste Form erneut lade mit Form = new form und form.show ergibt sich das problem, dass die erste Instanz der Form im Speicher bleibt und Ressourcen schluckt. Wie kann ich das handeln, bin etwas ratlos?

vielleicht noch zur Ergänzung: Die erste Form soll sich nicht einfach über Form.close schließen beim aufrufen der 2.Form, da ich sie, während die 2.form aufgerufen ist, für den User im Hintergrund sichtbar halten mochte.

Es ist auch nicht möglich, die 1.Form durch die 2. Form schließen zu lassen, bevor die 2. Form geschlossen wird, da sich form.close und dim form = new form in einer sub dummerweise nicht vertragen.

Hi,
was hindert dich daran die erste Form der zweiten Form mit im Konstruktur zu übergeben?
Mußt nur den Konstruktor von Form2 überladen.

Form2 = new form2(form1)

In Form2 kannsst du dann die Methode von Form1 ja aufrufen.

Wahrscheinlich gibt es noch 1000 andere Möglichkeiten.

Gruss
Joey

Hi,

Ich möchte jedoch, dass die Befehlle, die in der Sub Form_Load der
ersten Form stehen ausgeführt werden. Das lässt sich leider
nicht mit form.show machen.

Pardon, aber ganz kann ich Dir noch nicht folgen. Form1 erzeugt Form2, ja? Form2 wird wieder geschlossen, so kehrt mann zu Form1 zurück. Und Du willst nun, da die Form1 zum Teil bedeckt war, Form_Load erneut ausführen, oder?

Wenn ich dagegen die erste Form
erneut lade mit Form = new form und form.show ergibt sich das
problem, dass die erste Instanz der Form im Speicher bleibt
und Ressourcen schluckt. Wie kann ich das handeln, bin etwas
ratlos?

Von wo aus erzeugst Du die 1. Form erneut? Aus dem „Hauptprogramm“.

Wie gesagt, wenn ich DIch richtig verstehe, dann erzeugst Du im 1. Form eine Art MessageBox. Wenn Du das dort mit Form2.ShowDialog() tust, dann wird Form2 modal ausgeführt und erst wenn Form2 geschlossen wird, geht es mit der nächsten Anweisung in Form1 (also die nach Form2.ShowDialog()) weiter. Dort kannst DU ja dann nach belieben einfach Page_Load() von Hand aufrufen.

Falls ich Dich falsch verstanden habe, sags mir bitte, oder poste doch einfach mal ein Stück Code.

Grüße,
Andreas

HAllo,

Danke für die Hinweise an euch beide. Es ist bestimmt ein einfach zu meisterndes Problem, aber da ich Anfänger bin, fälllt es mir etwas schwer. Ich will in meinem Programm den Befehl MessageBox umgehen, da ich darin keinerlei Textfomratierungen etc. durchführen kann. Daher habe ich ein zweites Fenster als einfache Form mit dem Designer erstellt.

Aus de ersten Form lade ich die bei einem Event (ausfüllen ines Textfelder) in der 1. Form mit dem Code:

Dim ergebnis As New ergebnis
ergebnis.Show()

Wenn der User dann in der Form „Ergebnis“ auf den ok Button drückt, soll Form1 wieder geladen werden (Form 1 heißt im Programm wette) mit dem Code:

Dim wette As New wette
wette.Show()
Me.Hide()

Das Problem ist, dass das Programm über die Form Wette eine neue Form Wette legt (was nicht schlimm ist, aber umständlich, da der Speicher mit den unnützen Forms „Wette“ der vorigen Ausführungen zugemüllt wird). Ich weiß nicht, wie ich die Form wette aus der form ergebnis schließe, bevor ich sie wieder neu lade.

ok, bin mir nicht sicher, ob das klarer ist.

Grüße,

MArc

Hi,
lies dir das mal durch:

http://www.galileocomputing.de/openbook/visual_basic…

ansonsten ist das was ich zuvor geschrieben habe immer noch richtig.
Deine beiden Forms kennen sich schlicht nicht und du musst deiner Ergebnis-Form mitteilen von welcher Instanz von „Wette“ sie aufgerufen worden ist.

Gruss
Joey

Vielen Dank für die Hilfe, jetzt ist mir das Problm zumindest klar geworden. Da ich mehrere Forms mit Namen „Wette“ geöffnet habe, kann meine zweite Form „Ergebnis“ nicht wissen, welche Instanz ich meine, wenn ich von Ihr aus die Form „Wette“ anspreche.

Auch nach Lesen des Links (exzellentes E-Book, danke für den Hinweis) und ausprobieren deines Codes

Form2 = new form2(form1)

angepasst an mein Beispiel: rgebnis = new ergebnis(wette)

klappt der Verweis immer noch nicht (bei deinem COde Schnipsel zeigt Visual BAsic mir einen Fehler an, vielleicht schreibe ich es an die falsche Stelle im Programm?). NAja, weiss nicht, ob hier noch Hilfe möglich ist, vielleicht muss ich mir einmal grundlegende Literatur anschauen. Es ist nur etwas nervig, weil ich jezt erst einbmal doch wieder auf die blöde MessageBox zurückgreifen muss.