Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden.
Du solltest ein Upgrade durchführen oder einen alternativen Browser verwenden.
Du solltest ein Upgrade durchführen oder einen alternativen Browser verwenden.
[VB.NET] Zwei Formen - > Wert übergeben
- Ersteller corey
- Erstellt am
Hallo,
also wenn ich das aus der Erinnerung mit vb6 noch richtig weiss, hat das aber Nebenwirkungen. Sprich wenn form1 noch nicht sichtbar ist und dann darauf zugegriffen wird, erscheint plötzlich das Fenster von form1.
Also gehört da schon noch ein bisschen mehr Applikationslogik und ein globaler Datencontainer dazu.
Das wird in vb.net wohl auch nicht anders sein? Rein von der Logik her kann man auf Inhalte eines Fensters das noch nicht da ist auch nicht zugreifen.
Das ist jetzt sicher nicht der Weisheit letzter Schluss :-).
Man nehme zwei globale Variablen gValForm1 und gValForm2 und jedes Fenster schreibt dann bei Änderung seinen Wert hinein. Der jeweilige Partner kann dann nach Wunsch einfach den gewünschten Wert auslesen.
Oder alternativ die beiden Fenster verschicken sich Nachrichten und in der Antwort steht der gewünschte Wert drin.
MfG
Arnd
also wenn ich das aus der Erinnerung mit vb6 noch richtig weiss, hat das aber Nebenwirkungen. Sprich wenn form1 noch nicht sichtbar ist und dann darauf zugegriffen wird, erscheint plötzlich das Fenster von form1.
Also gehört da schon noch ein bisschen mehr Applikationslogik und ein globaler Datencontainer dazu.
Das wird in vb.net wohl auch nicht anders sein? Rein von der Logik her kann man auf Inhalte eines Fensters das noch nicht da ist auch nicht zugreifen.
Das ist jetzt sicher nicht der Weisheit letzter Schluss :-).
Man nehme zwei globale Variablen gValForm1 und gValForm2 und jedes Fenster schreibt dann bei Änderung seinen Wert hinein. Der jeweilige Partner kann dann nach Wunsch einfach den gewünschten Wert auslesen.
Oder alternativ die beiden Fenster verschicken sich Nachrichten und in der Antwort steht der gewünschte Wert drin.
MfG
Arnd
- Registriert
- März 2005
- Beiträge
- 254
Hi Arnd,
Danke für deine Antworten. Das stimmt, dass wenn eine Form nicht mehr sichtbar ist, dass der Wert dann verschwindet. Die Idee mit den Variablen habe ich auch schon probiert zu realisieren, funktioniert aber leider in vb.net nicht
Wie geht das mit den Nachrichten, welche du beschrieben hast?
Danke für deine Antwort schon im Voraus.
Danke für deine Antworten. Das stimmt, dass wenn eine Form nicht mehr sichtbar ist, dass der Wert dann verschwindet. Die Idee mit den Variablen habe ich auch schon probiert zu realisieren, funktioniert aber leider in vb.net nicht
Danke für deine Antwort schon im Voraus.
Dazu braucht du das Windows Handle der Forms. In VB6 muss man noch die Windows Funktion importieren/deklarieren.
Du deklarierst eine private Nachricht, z.b. WM_USER + 1 und dann mit SendMessage diese Nachricht an das andere Fenster schicken.
Das jeweilige Fenster muss dazu natürlich diese Nachricht empfangen bzw. abarbeiten. das passiert z.B. in onMessage. Der return Wert der nach Abarbeitung der Nachricht zurückgegeben wird kann dann vom Sender ausgewertet werden.
Das war jetzt sicher ziemlich allgemein. Das liegt aber daran das ich das Verfahren bei Visual C++ anwende. Es lässt sich aber analog in VB6 und damit sicher auch in VB.net anwenden.
Solltest Du das nicht hinbekommen. Die Variante mit den globalen Variablen muss aber auch gehen.
Noch ein Vorschlag. Lade beide Fenster bei Systemstart schon in den Speicher, aber halte sie unsichtbar. Ebenso beim schliessen nicht die Fenster löschen sondern nur unsichtbar schalten. Dann kannst Du jederzeit auf alle Inhalte zugreifen. Das gibt nur Probleme bei MDI Anwendungen.
MfG
Arnd
Du deklarierst eine private Nachricht, z.b. WM_USER + 1 und dann mit SendMessage diese Nachricht an das andere Fenster schicken.
Das jeweilige Fenster muss dazu natürlich diese Nachricht empfangen bzw. abarbeiten. das passiert z.B. in onMessage. Der return Wert der nach Abarbeitung der Nachricht zurückgegeben wird kann dann vom Sender ausgewertet werden.
Das war jetzt sicher ziemlich allgemein. Das liegt aber daran das ich das Verfahren bei Visual C++ anwende. Es lässt sich aber analog in VB6 und damit sicher auch in VB.net anwenden.
Solltest Du das nicht hinbekommen. Die Variante mit den globalen Variablen muss aber auch gehen.
Noch ein Vorschlag. Lade beide Fenster bei Systemstart schon in den Speicher, aber halte sie unsichtbar. Ebenso beim schliessen nicht die Fenster löschen sondern nur unsichtbar schalten. Dann kannst Du jederzeit auf alle Inhalte zugreifen. Das gibt nur Probleme bei MDI Anwendungen.
MfG
Arnd
- Registriert
- März 2005
- Beiträge
- 254
HI Arnd & alle anderen welche dies interessiert:
und zwar die Lösung liegt darin dass man die Variable, welche man freigeben will 'public shared' machen muss. damit die variablen von den anderen formen auf diese Variable zu greifen kann. anschliessend muss ich den variblen wert mit get holen
bei mir musste ich einen string von der Form1 auf einem label in der form2 haben:
form1:
public shared transfer as string
shared = txtname.text
form2:
public property name_test() as string
get
return form1.shared
end get
set(byval value as string)
txttest.text = form1.shared
end set
bei mir gings so.
bei weiteren fragen nur fragen
und zwar die Lösung liegt darin dass man die Variable, welche man freigeben will 'public shared' machen muss. damit die variablen von den anderen formen auf diese Variable zu greifen kann. anschliessend muss ich den variblen wert mit get holen
bei mir musste ich einen string von der Form1 auf einem label in der form2 haben:
form1:
public shared transfer as string
shared = txtname.text
form2:
public property name_test() as string
get
return form1.shared
end get
set(byval value as string)
txttest.text = form1.shared
end set
bei mir gings so.
bei weiteren fragen nur fragen
Ähnliche Themen
- Antworten
- 5
- Aufrufe
- 1.607
- Antworten
- 21
- Aufrufe
- 5.041
M