2016-07-02 39 views
-1

我的主表單上有一個按鈕和隱藏文本框。當我按下按鈕時,它會隱藏主窗體並顯示第二個窗體。當我按下第二個窗體上的按鈕時,我想再次顯示主窗體,但這次我需要顯示隱藏的文本框。我知道如何將文本從文本框傳遞到另一個表單,但不僅僅是文本框的引用。C#將控制參考傳遞給另一個表單

+0

winforms? asp.net? –

+0

winforms應用程序 – CamlCase

+0

以第一種形式創建一個公共方法來爲您執行任務。將form1傳遞給第二個表單。當您需要完成這項工作時,請調用form1的方法。 –

回答

1

您最好傳遞第二個窗體的完整主窗體實例,並創建一個公用函數以將文本框設置爲可見,或者在其周圍創建屬性。 類似於:

//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

你發佈你的答案2秒之前的我的意見;) –

+1

個人而言,我討厭傳遞父形式參考對話/子/孩子。有一天如果你想重用的形式在其他地方(我的,怎麼經常出現這種情況),你有一個爛攤子重構。海事組織事件會好得多。 – jleach

0

對我來說像自定義事件的聲音會是更好的方法。讓輔助表單暴露一個事件,在任何適當的時候觸發事件(按下按鈕)。在您的主表單中,當您創建第二個表單的實例時,訂閱該事件。然後從mainform的事件訂閱中運行「unhide」代碼。

這使耦合向下兩種形式,並導致更容易維護和擴展代碼(最好的效果,使用的界面,但事件是一個良好的學習中間地帶)。

事情是這樣的: (它一直以來我的WinForms,甚至事件工作了很長一段時間,因此,如果這需要精煉讓我知道)

// 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; 
    } 

} 

這所有的一切是一個更好的方法在代碼架構方面。現在彈出窗口並不關心誰打開它(它沒有對主窗體的引用),並且可以將自定義事件(這實際上是你以後的內容)管理到任何需要的控制級別,而不會干擾其他人事情的工作(例如,或許以後你可能需要有一個觸發此相同的自定義事件......不同的動作)

回味無窮。

相關問題