Ich habe ein Hauptformular (nennen wir es frmHireQuote), das ein untergeordnetes Element eines Haupt-MDI-Formulars (frmMainMDI) ist und das über ShowDialog () ein anderes Formular (frmImportContact) anzeigt, wenn auf eine Schaltfläche geklickt wird.
Wenn der Benutzer in frmImportContact auf "OK" klickt, möchte ich einige Zeichenfolgenvariablen an einige Textfelder in frmHireQuote zurückgeben.
Beachten Sie, dass es mehrere Instanzen von frmHireQuote geben kann. Es ist offensichtlich wichtig, dass ich zu der Instanz zurückkehre, die diese Instanz von frmImportContact aufgerufen hat.
Was ist die beste Methode, um dies zu tun?
quelle
Normalerweise erstelle ich eine statische Methode für Formular / Dialog, die ich aufrufen kann. Dies gibt den Erfolg (OK-Taste) oder Misserfolg zusammen mit den Werten zurück, die eingegeben werden müssen.
Und auf dem Formular:
Um Ihr Formular anzurufen;
quelle
frm
can (und genau das, als ich es gelesen habe) führt jedoch zu Verwirrung ...Ich habe ein weiteres kleines Problem mit diesem Code gefunden ... oder zumindest war es problematisch, als ich versuchte, ihn zu implementieren.
Die Schaltflächen in frmMain geben keinen kompatiblen Wert zurück. Mit VS2010 habe ich Folgendes hinzugefügt und alles begann einwandfrei zu funktionieren.
Nach dem Hinzufügen der beiden Schaltflächenwerte funktionierte der Dialog hervorragend! Danke für das Beispiel, es hat wirklich geholfen.
quelle
Ich habe nur etwas als Referenz in den Konstruktor eingefügt, damit das Unterformular seinen Wert ändern kann und das Hauptformular neue oder geänderte Objekte aus dem Unterformular abrufen kann.
quelle
Ich benutze MDI ziemlich oft, ich mag es viel mehr (wo es verwendet werden kann) als mehrere schwebende Formen.
Aber um das Beste daraus zu machen, müssen Sie sich mit Ihren eigenen Ereignissen auseinandersetzen. Es macht dir das Leben so viel einfacher.
Ein Skelettbeispiel.
Haben Sie Ihre eigenen Interrupt-Typen,
Dann dein eigener Args-Typ
Verwenden Sie dann den Delegaten in Ihrem Namespace, jedoch außerhalb einer Klasse
Lassen Sie den MDIparent jetzt entweder manuell oder über die GUI auf die Ereignisse der untergeordneten Formulare reagieren.
Aber mit Ihren eigenen Args können Sie dies auf eine einzige Funktion reduzieren. und Sie können Vorkehrungen treffen, um die Interrupts zu unterbrechen, gut zum Debuggen, aber auch auf andere Weise nützlich sein.
Lassen Sie einfach alle Ihre mdiparenten Ereigniscodes auf die eine Funktion verweisen.
Ein einfacher Schaltmechanismus reicht normalerweise aus, um Ereignisse an geeignete Formulare weiterzuleiten.
quelle
Wenn Sie Daten an
form2
vonform1
übergeben möchten, ohne wie neu zu übergebenform(sting "data");
Mach das in Form 1
in Form 2 hinzufügen
Sie können den Wert auch
form1
so verwenden, wenn Sie etwas eintauschen möchtenform1
nur in form1
quelle
Zuerst müssen Sie das Attribut in form2 (untergeordnet) definieren. Sie aktualisieren dieses Attribut in form2 und auch in form1 (übergeordnet):
Aufruf von form2 (Kind) von form1 (Eltern):
quelle
Ich löse ein Ereignis in dem Formular aus, in dem der Wert festgelegt ist, und abonniere dieses Ereignis in den Formularen, die sich mit der Wertänderung befassen müssen.
quelle
Delegierte sind die beste Option zum Senden von Daten von einem Formular zu einem anderen.
quelle