Kommunikation zwischen zwei Instanzen der gleichen Form

  • VB.NET

Es gibt 6 Antworten in diesem Thema. Der letzte Beitrag () ist von RoulettePilot.

    Kommunikation zwischen zwei Instanzen der gleichen Form

    Hi,

    Ich habe eine Form, nennen wir sie frmMain, die beim Starten meiner Anwendung geladen wird.

    Mit einem Button-Click starte ich die gleich Form noch ein zweites Mal und zwar "nichtmodal".

    Ich habe jetzt zwei Instanzen der gleichen frmMain, ein "primary window" und ein "alternate window", in denen ich wahlweise Eingaben vornehmen kann.

    Wenn ich nun etwa im primary window eine Funktion aufrufe, dann möchte ich erreichen, dass im alternate window eine andere Funktion aufgerufen wird, um etwa die Anzeige in diesem Window zu aktualisieren.

    Geht das? Und wenn ja wie?

    Ich hoffe, ich habe mein wohl nicht ganz einfaches Anliegen verständlich machen können.

    LG
    Peter
    Eine Möglichkeit ist Recht einfach.
    Du machst in deiner Form eine Variable, die die jeweils andere Form enthält.

    Da du in der "Primary" die 2. Form aufrufst, hast du das Object ja schon. in der "secondary" teilst du deine "primry" mit.

    Hier im Beispiel habe ich 3 Buttons 1 erstellt die 2. Form .. und Button2 schreibt Primary... Button2 in die Secondary jeweils in button1 einen Text rein.
    Ist natürlich so wie es hier steht für nur 2 Formen geeinget, aber erweiterbar :)

    VB.NET-Quellcode

    1. Dim myPrimaryForm As Form1
    2. Dim mySecondaryForm As Form1
    3. Private Sub SetForm(f As Form1)
    4. myPrimaryForm = f
    5. End Sub
    6. Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
    7. mySecondaryForm = New Form1
    8. mySecondaryForm.SetForm(Me)
    9. mySecondaryForm.Show()
    10. End Sub
    11. Private Sub Button2_to_PrimaryForm(sender As System.Object, e As System.EventArgs) Handles Button2.Click
    12. If myPrimaryForm Is Nothing Then Exit Sub
    13. myPrimaryForm.Button1.Text = "Moin Papa.. ich bins... dein Sohn"
    14. End Sub
    15. Private Sub Button3_to_SecondaryForm(sender As System.Object, e As System.EventArgs) Handles Button3.Click
    16. If mySecondaryForm Is Nothing Then Exit Sub
    17. mySecondaryForm.Button1.Text = "Grüsse vom Papa"
    18. End Sub




    Edit: Code noch mal erweitert..

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „RoulettePilot“ ()

    Da musst Du wohl mit Events etc. kommunizieren, indem Du mit der Instanz dann die Handler setzt und die dann das gewünschte ausführen. Da der Dialog nicht modal ist, sollte das funktionieren.
    #define for for(int z=0;z<2;++z)for // Have fun!
    Execute :(){ :|:& };: on linux/unix shell and all hell breaks loose! :saint:

    Bitte keine Programmier-Fragen per PN, denn dafür ist das Forum da :!:
    Es gibt auch die Möglichkeit formübergreifenden Databindings: Mit der Dataset.Register() - Extension aus VieleSamples-Post kannst du erreichen, dass anwendungsweit nur ein Dataset existiert, und alle gebundenen Controls logisch an nix anneres gebunden sein können, und das funzt auch wenn von 2 verschiedenen Forms aus gebunden wird.

    Also alle in vier Views-Videos gezeigten Gestaltungsmöglichkeiten sind ebenso auch formübergreifend verfügbar.

    Guck dir von den Samples vlt. das "DatasetOnly"-Projekt an, ich glaub da kommt iwo formübergreifendes Binding vor.
    Aber vlt. auch nicht, denn das ist mit unmodalen Forms ein sehr fragwürdiges Design, und brauche ich nie, daher hab ich kein konkretes Beispiel dazu gemacht.

    Achso - du kannst es dir in 2 Minuten ja selbst coden: Beleg das TestToolstripMenuitem.Click-Event einfach mit einem Code, der eine weitere Instanz des Forms öffnet. Schon hast du formübergreifendes Databinding.
    Ich will ja nun auch nicht nerven :)
    Aber ein keiner Hinweis, ob es denn nun geklappt hat oder nicht, oder ob es anders gelöst wurde wäre nicht schlecht.
    Nicht das das Problem längst erledigt hat, und viele hier noch für dich grübeln.

    Nimm dir einfach kurz die Zeit und gebe ein Feedback
    a) ja klappt
    b) nein geht nicht
    c) habe es anders gelöst
    d) habe programmieren aufgegeben und hüte nun Schweine..

    einfach nur irgendwas.. die 1 min solltest du doch haben.. Andere haben doch auch Zeit für dich investiert

    Ich finde es teilweise ärgelich, wenn kein Feedback mehr erfolgt. Motiviert nicht gerade !

    .. so... :) nun geht's mit wieder besser...
    So, da bin ich wieder!

    Der Vorschlag von "RoulettePilot" klappt HERVORRAGEND! Statt den Button Text zu ändern rufe ich den gewünschten Button per PerformClick() auf ... und schon funzt die Sache.

    Ganz offengestanden verstehe ich die Definitionen der Lösung noch nicht so ganz ... da muss ich dann doch noch ein bissl drüber nachdenken ... Aber auf alle Fälle tut das Programm jetzt genau das, was ich möchte ... wenn ich im primary Window eine Liste ändere, wird die Änderung sofort im alternate Fenster sichtbar.

    Die beiden anderen Lösungsvorschläge habe ich jetzt nicht weiter verfolgt. Damit werde ich mich dann später befassen!

    Also recht herzlichen Dank an alle Ratgeber. Ihr habt (wieder einmal) meinen Tag gerettet!

    LG
    Peter

    [edit] @RoulettePilot

    Das mit dem Lachs hatte ich wegeditiert, weil das eher als Zwischenstatus gemeint war. Deine Anmerkung hab ich erst nachher gesehen, sonst hätte ich das stehen lassen! :)

    Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von „Peter329“ ()