2016-07-02 17 views
-1

Ich habe eine Schaltfläche und ein ausgeblendetes Textfeld in meinem Hauptformular. Wenn ich den Knopf drücke, wird das Hauptformular ausgeblendet und das zweite Formular angezeigt. Wenn ich den Knopf auf dem zweiten Formular drücke, möchte ich wieder das Hauptformular anzeigen, aber dieses Mal muss ich das versteckte Textfeld anzeigen. Ich weiß, wie man den Text von einem Textfeld an ein anderes Formular weitergibt, aber nicht nur an den Verweis des Textfelds.C# Steuerreferenz an ein anderes Formular übergeben

+0

winforms? asp.net? –

+0

winforms-Anwendung – CamlCase

+0

Erstellen Sie eine öffentliche Methode in Ihrer ersten Form, um die Aufgabe für Sie auszuführen. Übergeben Sie form1 an Ihre zweite Form. Wenn Sie den Job ausführen müssen, rufen Sie die Methode von form1 auf. –

Antwort

1

Sie übergeben besser die vollständige Hauptformularinstanz für das zweite Formular und erstellen eine öffentliche Funktion, um das Textfeld sichtbar zu machen oder um es herum eine Eigenschaft zu erstellen. Etwas wie:

//form1 
Form2 second = new Form2(this); 
}.... 
public void ShowTextBox() 
{ 
    textbox1.Visible=true; 
} 
//form2 
Form parent; 
public Form2(Form _parent) 
{ 
    parent=_parent; 
} 
///later 
parent.Show(); 
parent.ShowTextBox(); 
+1

Sie haben Ihre Antwort 2 Sekunden vor meinem Kommentar geschrieben;) –

+1

Ich persönlich hasse es, einen Elternteil zu übergeben form Referenz zu einem Dialog/sub/Kind. Eines Tages, wenn Sie dieses Formular woanders wiederverwenden wollen (und mein, wie oft das passiert), haben Sie ein Chaos um zu refaktorieren. Die Veranstaltungen wären viel besser, IMO. – jleach

0

wie ein benutzerdefiniertes Ereignis klingt für mich wäre ein besserer Ansatz sein. Lassen Sie das sekundäre Formular ein Ereignis aussetzen, das zu jeder geeigneten Zeit ausgelöst wird (Drücken Ihrer Taste). Wenn Sie in Ihrer Hauptform Ihre Instanz Ihres zweiten Formulars erstellen, abonnieren Sie dieses Ereignis. Führen Sie dann Ihren Code aus dem Ereignis-Abonnement des Mainforms aus.

Dies hält die Kopplung auf den beiden Formen und führt zu viel leichter wartbar und erweiterbar Code (für den besten Effekt, verwenden Sie Schnittstellen, aber Ereignisse sind ein guter Mittelweg für das Lernen).

Etwas wie folgt aus: (es ist eine lange Zeit her ist, seit ich mit WinForms gearbeitet oder Ereignisse selbst, also wenn diese Veredelung kennen mich braucht lassen)

// your secondary/popup form's class 
public partial class Form2 : Form 
{ 

    // add a custom event 
    public EventHandler<EventArgs> MyCustomEvent; 

    // link up your button click event 
    void InitializeComponent() { 
     myButton.Click += myButtonClick; 
    } 

    // when your button is clicked, raise your custom event 
    void myButtonClick(object sender, EventArgs, e) { 
     onMyCustomEvent(); 
    } 

    // this "broadcasts" the event 
    void onMyCustomEvent() { 
     EventHandler<EventArgs> h = MyCustomEvent; 
     if (h != null) { 
      h(this, new EventArgs()); 
     } 
    } 

} 


// your main form's class 
public partial class MainForm 
{ 

    void InitializeComponent() { 
     // ... 
    } 

    void showForm2() { 
     var form2 = new Form2(); 
     form2.MyCustomEvent += form2CustomEvent; 
     form2.Show(); 
    } 

    void form2CustomEvent(object sender, EventArgs e) { 
     myHiddenTextBox.Visible = true; 
    } 

} 

Alles in allem ist dies ein viel besserer Ansatz in Bezug auf Code-Architektur. Nun ist es dem Popup egal, wer es öffnet (es hat keinen Verweis auf das Hauptformular), und das benutzerdefinierte Ereignis (was wirklich das ist, wonach Sie suchen) kann auf jeder gewünschten Steuerungsebene verwaltet werden, ohne andere zu stören Ding Arbeit (zum Beispiel vielleicht später möchten Sie möglicherweise eine andere Aktion haben, die das gleiche benutzerdefinierte Ereignis ausgelöst wird ...)

Denkanstoß.

Verwandte Themen