Parameter zwischen Formularen in C # hin und her übergeben

Ich erstelle eine Anwendung, in der ein Benutzer auf eine Schaltfläche in form1 klickt, wodurch form2 angezeigt wird. Der Benutzer füllt dann einen Chat auf form2 aus und klickt dann auf eine Schaltfläche, die form2 schließt und Parameter zur Verarbeitung an form1 zurücksendet. Wie kann ich das in C # machen? Ich habe gesehen, wie Leute Immobilien dazu benutzt haben, aber die Beispiele sind nicht klar genug. Kann jemand einen Beispielcode geben, der mir zeigt, wie ich die Parameter übergeben kann? Ich würde die Eigenschaftsmethode bevorzugen, aber solange es funktioniert, werde ich es als Antwort zählen.

Einfach ausgedrückt, platzieren Sie Ihre Formularelemente wie üblich in das zweite Formular. Dann können Sie diesem Formular öffentliche Accessoren hinzufügen, aus denen Sie dann ziehen und referenzieren können. Wenn beispielsweise Form2 Textfelder enthält, die Sie zurückziehen möchten, können Sie Folgendes tun:

class Form2 { // Form2.designer.cs private TextBox TextBox1; // Form2.cs public String TextBoxValue // retrieving a value from { get { return this.TextBox1.Text; } } public Form2(String InitialTextBoxValue) // passing value to { IntiializeComponent(); this.TextBox1.Text = InitialTextBoxValue; } } 

Dann greifen Sie später beim Erstellen des Formulars darauf zu (ähnlich wie beim OpenFileDialog für Dateiname usw.).

 public void Button1_Click(object sender, EventArgs e) { Form2 form2 = new Form2("Bob"); // Start with "Bob" form2.ShowDialog(); // Dialog opens and user enters "John" and closes it MessageBox.Show(form2.TextBoxValue); // now the value is "John" } 

Dasselbe kann für Int32, Boolean usw. durchgeführt werden. Hängt nur vom Wert des Formulars ab, ob Sie es umsetzen / validieren möchten oder nicht.

Alternativ können Sie mit der Modifiers Eigenschaft innerhalb des Formular-Designers spielen, wo Sie das Steuerelement öffentlich machen können, sodass es von außen zugänglich ist. Ich persönlich empfehle die Verwendung eines Accessors, damit Sie die zurückgegebenen Ergebnisse überprüfen und bestätigen können, anstatt nur den Wert zu speichern (da diese Logik normalerweise im Formular selbst zu finden ist und nicht in jedem Fall, in dem Sie Form2 aufrufen möchten / verwenden).

So gebe ich gerne Parameter an ein anderes Formular zurück und zurück:

Bereitstellung des folgenden Formularentwurfs für Form1 und Form2:

Form1 und Form2

In diesem Beispiel wird das Textfeld ‘txtBoxForm1’ in Form1 an Form2 übergeben, wo es zum Initialisieren des Textfelds ‘txtBoxForm2’ in Form2 verwendet wird. Nachdem der Benutzer mit Form2 interagiert und ihn durch Klicken auf die Schaltfläche [Return to Form1] beendet hat, wird der Wert des Textfelds ‘txtBoxForm2’ dem Parameter zugewiesen, der (per Referenz) an das Textfeld ‘txtBoxForm1’ in Form1 zurückgegeben wird.

Die Kodierung erfolgt in zwei einfachen Schritten:

Schritt 1) Übergeben Sie in Form1 die Parameter an Form2, indem Sie die ShowDialog () -Methode überladen:

  public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void btnSend_Click(object sender, EventArgs e) { Form2 f2 = new Form2(); //Step 1) //Display the form passing parameter(s) via overloading //the ShowDialog() method. //In this example the parameter is the 'txtBoxForm1' on Form1. // f2.ShowDialog(); is replaced by f2.ShowDialog(ref txtBoxForm1); } } 

Im obigen Code ist der Parameter das Textfeld ‘txtBoxForm1’ selbst, das als Verweis übergeben wird. Bei der Übergabe als Referenz wird der Textfeldwert nicht nur an Form2 übergeben, sondern er kann auch alle Änderungen an diesem Textfeld empfangen und anzeigen, die während der Ausführung von Form2 auf diesen Textfeldparameter angewendet werden.

Ich habe die gesamte Form1-class angegeben, um zu zeigen, dass in dieser class nichts anderes als das Überladen des Methodenaufrufs ‘f2.ShowDialog ()’ besonders ist.

Schritt 2) Parameter über die überladene ShowDialog () -Methode empfangen und zurückgeben:

 public partial class Form2 : Form { public Form2() { InitializeComponent(); } private void btnReturn_Click(object sender, EventArgs e) { this.Close(); } //Step 2) //Receiving and returning parameter(s) via the overloaded ShowDialog() method. //This saves the need to have Properties and or fields associated //to parameters when overloading the above Form() constructor instead. public void ShowDialog(ref TextBox txtBoxForm1) { //Assign received parameter(s) to local context txtBoxForm2.Text = txtBoxForm1.Text; this.ShowDialog(); //Display and activate this form (Form2) //Return parameter(s) txtBoxForm1.Text = txtBoxForm2.Text; } } 

Ich habe wieder den vollständigen Code der Formularklasse (in diesem Fall Form2) angegeben, um zu zeigen, wie begrenzt die Kodierung ist. Hier ist kein zusätzliches Feld oder Eigentum erforderlich. Das liegt daran, dass ich hier die statement ‘ShowDialog ()’ anstelle des Form2 () – Konstruktors von Form1 verwendet hat, um den Parameter zu übergeben. Im Gegensatz zum Form2 () -Konstruktor ist die ShowDialog () -Methode ein Umschlag für die Benutzerinteraktionsphase mit Form2. Sein Timing ermöglicht es dem Parameter ‘(ref txtBoxForm1)’, den vollständigen und ausreichenden Vertreter des Parameters zu sein, den wir senden und empfangen möchten.

Das Überladen einer Methode durch erneute Deklaration mit einem anderen Parametersatz (auch Signatur genannt) ist eine leistungsstarke function von C # .net. In diesem Fall können Sie zum einen Parameter zum Aufruf der Methode ‘ShowDialog ()’ hinzufügen. Andererseits verliert die überladene Methode nichts von der Originalversion dieser Methode, da die Originalversion von Die Framework-Methode ShowDialog () .net wird ebenfalls über ‘this.ShowDialog ();’ ausgeführt. statement.

Das ist es für mich jetzt.

Ich hoffe, das hilft!