我的主表單上有一個按鈕和隱藏文本框。當我按下按鈕時,它會隱藏主窗體並顯示第二個窗體。當我按下第二個窗體上的按鈕時,我想再次顯示主窗體,但這次我需要顯示隱藏的文本框。我知道如何將文本從文本框傳遞到另一個表單,但不僅僅是文本框的引用。C#將控制參考傳遞給另一個表單
回答
您最好傳遞第二個窗體的完整主窗體實例,並創建一個公用函數以將文本框設置爲可見,或者在其周圍創建屬性。 類似於:
//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();
你發佈你的答案2秒之前的我的意見;) –
個人而言,我討厭傳遞父形式參考對話/子/孩子。有一天如果你想重用的形式在其他地方(我的,怎麼經常出現這種情況),你有一個爛攤子重構。海事組織事件會好得多。 – jleach
對我來說像自定義事件的聲音會是更好的方法。讓輔助表單暴露一個事件,在任何適當的時候觸發事件(按下按鈕)。在您的主表單中,當您創建第二個表單的實例時,訂閱該事件。然後從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;
}
}
這所有的一切是一個更好的方法在代碼架構方面。現在彈出窗口並不關心誰打開它(它沒有對主窗體的引用),並且可以將自定義事件(這實際上是你以後的內容)管理到任何需要的控制級別,而不會干擾其他人事情的工作(例如,或許以後你可能需要有一個觸發此相同的自定義事件......不同的動作)
回味無窮。
- 1. C++:如何將參考函數傳遞給另一個函數?
- 2. Angular JS將參數一個控制器傳遞給另一個
- 3. 將Tobject傳遞給另一個表單?
- 4. 作爲參考傳遞控制參考
- 5. 將一個表單的DatePicker.Value傳遞給另一個表單?
- 6. 將參數傳遞給另一個類
- 7. 將TextBox的文本傳遞給C#中的另一個表單?
- 8. 將DataGrid的行傳遞給另一個wpf表單c#
- 9. 將一個控制器的值傳遞給另一個控制器
- 10. Rails語法將POST參數從表單傳遞給控制器
- 11. 提交表單時無法將參數傳遞給控制器
- 12. 將完整的子表單傳遞給另一個子表單
- 13. 將HTML表單的值傳遞給另一個表單
- 14. 將表單數據傳遞給另一個表單Xcode Storyboard
- 15. MySQL,將AUTO_INCREMENT傳遞給另一個表
- 16. 將列表傳遞給另一個類
- 17. 將參數傳遞給新控制器
- 18. 將參數傳遞給用戶控制
- 19. 如何將參數從一個特徵傳遞給另一個表單域?
- 20. 將參數傳遞給另一個C++源文件
- 21. C++將函數參數傳遞給另一個lambda
- 22. C# - 將所有方法參數傳遞給另一個方法?
- 23. 將NSMutableArray傳遞給另一個視圖控制器
- 24. 如何將控制器方法的值傳遞給另一個?
- 25. 將值傳遞給另一個首先執行的控制器
- 26. 將對象傳遞給另一個控制器
- 27. Yii2 - 將Active View中的ActiveDataProvider傳遞給另一個控制器
- 28. 將UIImage傳遞給另一個視圖控制器
- 29. 如何將值傳遞給另一個視圖控制器?
- 30. 將params傳遞給另一個控制器的軌道
winforms? asp.net? –
winforms應用程序 – CamlCase
以第一種形式創建一個公共方法來爲您執行任務。將form1傳遞給第二個表單。當您需要完成這項工作時,請調用form1的方法。 –