Interaktion zwischen Formularen – Wie ändert man ein Steuerelement eines Formulars aus einer anderen Form?

Ich möchte ComboBox.SelectedValue festlegen, wenn ich die Zeile in meinem dataGridView auf dem ersten Formular auswählen, um ComboBox mit diesem Wert in einem anderen Formular aufzufüllen,

Auf dem zweiten Formular in meinem Load-Ereignis habe ich comboBox.DataSource , DisplayMember , ValueMember richtig eingestellt, aber nichts passiert, wenn ich zuerst selectedValue einstelle. Alles funktioniert gut, wenn ich es auf einem Formular mache

   

Form in Windows Forms ist eine class wie andere C # -classn. Die Art der Kommunikation zwischen den Formen ist die gleiche wie die der classn. Sie können diese Optionen bei der Kommunikation zwischen classn berücksichtigen:

Manipuliere zweite Form von der ersten Form

  • Sie können dem Konstruktor der zweiten Form geeignete Parameter hinzufügen. Dann können Sie beim Erstellen einer Instanz des zweiten Formulars Werte an den Konstruktor übergeben. Speichern Sie im zweiten Formular Parameter in Mitgliedsfeldern und verwenden Sie sie bei Bedarf.

  • Sie können die öffentliche Eigenschaft oder Methode im zweiten Formular erstellen und diese Eigenschaften nach dem Erstellen einer Instanz des zweiten Formulars festlegen. Auf diese Weise können Sie sie verwenden, wenn Sie in der zweiten Form benötigen. Diese Option ist nicht auf das Übergeben von Werten beim Erstellen des zweiten Formulars beschränkt. Sie können diese Eigenschaft sogar während der Ausführung des zweiten Form . Es ist auch nützlich, um daraus einen Wert zu erhalten.

  • Als weitere Option können Sie das Steuerelement, das Sie manipulieren möchten, öffentlich machen und auf diese Weise von einem anderen Formular aus darauf zugreifen. Die Verwendung einer Methode ist eine empfohlene Methode.

Manipuliere die erste Form von der zweiten Form

  • Sie können eine öffentliche Methode oder Eigenschaft in der ersten Form erstellen und eine Instanz des ersten Formulars an die zweite Form übergeben. Wenn Sie dann diese Methode / Eigenschaft für die übergebene Instanz verwenden, können Sie das erste Formular bearbeiten.

  • Sie können ein Ereignis in zweiter Form erstellen und nachdem Sie eine Instanz der zweiten Form erstellt haben, abonnieren Sie diese in der ersten Form und fügen Sie den Code zum Ändern des Formulars in den Handler ein. Dann reicht es, das Event in zweiter Form zu veranstalten.

  • Sie können eine öffentliche Eigenschaft vom Typ Action oder einen anderen Delegattyp in zweiter Form definieren und dann nach dem Erstellen einer Instanz des zweiten Formulars die Eigenschaft mithilfe einer benutzerdefinierten Aktion zuweisen. Dann ist es in zweiter Form ausreichend, die Aktion aufzurufen, wenn Sie das erste Formular bearbeiten müssen.

  • Auch hier können Sie eine Steuerung der ersten Form als öffentlich festlegen und dann, wenn Sie eine Instanz der ersten Form an die zweite Form übergeben, das Steuerelement manipulieren. Es wird empfohlen, andere Lösungen zu verwenden. Es ist so, als würde man eine öffentliche Eigenschaft oder Methode erstellen, aber eine Methode, die eine bestimmte Aufgabe für das Steuerelement ausführt, ist besser, wenn das gesamte Steuerelement verfügbar gemacht wird. Aber Sie können diese Lösung einige Male benötigen.

Hier sind einige nützliche Beispiele für obige Lösungen.

Manipuliere zweite Form von der ersten Form

Example1 – Konstruktor der zweiten Form verwenden

Verwenden Sie dieses Beispiel, wenn Sie beim Erstellen des zweiten Formulars einige Daten an das zweite Formular übergeben müssen.

 public partial class Form2 : Form { int selectedValue; public Form2(int value) { InitializeComponent(); selectedValue = value; } private void Form2_Load(object sender, EventArgs e) { //Load data this.comboBox1.DataSource = new MyDbContext().Categories.ToList(); this.comboBox1.DisplayMember = "Name"; this.comboBox1.ValueMember = "Id"; this.comboBox1.SelectedValue = selectedValue; } } 

Dann ist es in Ihrer ersten Form ausreichend, den Wert an Form2 zu Form2 wenn Sie eine neue Instanz davon erstellen:

 var value = 2; // Or get it from grid var f = new Form2(value); f.ShowDialog(); 

Beispiel 2 – Verwenden der öffentlichen Eigenschaft oder Methode der zweiten Form

Verwenden Sie dieses Beispiel, wenn Sie Daten beim Erstellen oder sogar nach dem Erstellen des zweiten Formulars an das zweite Formular übergeben müssen.

 public partial class Form2 : Form { public Form2() { InitializeComponent(); } public string SomeValue { get { return textBox1.Text;} set { textBox1.Text = value;} } } 

Dann ist es in Ihrem ersten Formular ausreichend, den Wert an Form2 zu Form2 wenn Sie nach dem Erstellen von Form2 oder wann immer Sie Wert von textBox1 in Form2 textBox1 Form2 :

 var f = new Form2(); //value is not needed here f.SomeValue = "some value"; f.Show(); //... f.SomeValue = "some other value"; 

Beispiel 3 – Eine Kontrolle der zweiten Form öffentlich machen

Verwenden Sie dieses Beispiel, wenn Sie eine Eigenschaft eines Steuerelements auf dem zweiten Formular, beim Erstellen oder sogar nach dem Erstellen des zweiten Formulars ändern müssen. Es ist besser, öffentliche Eigenschaft oder Methode zu verwenden, anstatt die gesamten Steuerelementeigenschaften verfügbar zu machen.

Wählen Sie in Ihrem Form im Designer das Steuerelement aus, und legen Sie im Eigenschaftenfenster die Modifiers Eigenschaft auf Public . Stellen Sie außerdem sicher, dass die GenerateMember Eigenschaft true . Dann können Sie einfach auf dieses Steuerelement zugreifen, indem Sie seinen Namen außerhalb des Form .

 var f = new Form2(); f.textBox1= "some value"; 

Manipuliere die erste Form von der zweiten Form

Beispiel 4 – Erstellen Sie eine öffentliche Methode oder Eigenschaft in der ersten Form und übergeben Sie eine Instanz der ersten Form an den Konstruktor der zweiten Form

Verwenden Sie dieses Beispiel, wenn Sie das erste Form vom zweiten Formular ändern müssen.

Erstellen Sie in Ihrem Form1 eine Eigenschaft einer Methode, die einige Parameter akzeptiert und die Logik darin Form1 :

 public void ChangeTextBox1Text(string text) { this.textBox1.Text = text; } 

Erstellen Sie dann einen Konstruktor in Form2 der einen Parameter vom Typ Form1 akzeptiert und den übergebenen Wert in einem Mitgliedsfeld Form1 und verwenden Sie, wenn Sie benötigen:

 Form1 form1; public Form2 (Form1 f) { InitializeComponent(); form1 = f; } private void button1_Click(object sender, EventArgs e) { form1.ChangeTextBox1Text("Some Value"); } 

Beim Erstellen von Form2 sollten Sie nun eine Instanz von Form1 an ihn übergeben:

 var f = new Form2(this); f.Show(); 

Beispiel 5 – Verwenden des Ereignisses der zweiten Form in der ersten Form

Sieh dir diesen Beitrag an . Es geht um die Kommunikation zwischen Form und Kontrolle, aber auch um die Kommunikation zwischen Formularen.

Beispiel 6 – Injektion einer Aktion in zweiter Form

Sieh dir diesen Beitrag an . Es geht um die Kommunikation zwischen Form und Kontrolle, aber auch um die Kommunikation zwischen Formularen.

Beispiel 7 – Eine Kontrolle der ersten Form öffentlich machen

In dieser Lösung müssen Sie ein Steuerelement in der ersten Form öffentlich machen, wie in Beispiel 3. Dann wie in Beispiel 4 übergeben Sie eine Instanz des ersten Formulars an das zweite Formular und behalten Sie es in einem Feld und verwenden Sie es, wenn Sie brauchen. Verwenden einer öffentlichen Methode oder Eigenschaft ist bevorzugt.

 Form1 form1; public Form2 (Form1 f) { InitializeComponent(); form1 = f; } private void button1_Click(object sender, EventArgs e) { form1.textBox1.Text = "Some Value"; } 

Wenn Sie Form2 erstellen, Form2 Sie ihm eine Instanz von Form1 :

 var f = new Form2(this); f.Show();