我有两种形式,Login和Form1。当我单击btnLogin_Click窗体上的Login时,它将打开带有以下代码的Form1:private void btnLogin_Click(object sender, EventArgs e){ Form1 pu = new Form1(label2.Text); pu.Show(); pu.FormClosing += Pu_FormClosing; Hide();}private void Pu_FormClosing(object sender, FormClosingEventArgs e){ this.Show();}当我单击btnExit_Click上的Form1时,它将关闭该窗体并使用以下代码打开Login窗体:private void btnExit_Click(object sender, EventArgs e){ this.Close();}现在,我想要找到一种方法,当我单击btnExit时它会隐藏Form1并打开Login表单,而当我单击Login表单上的登录按钮时,它会显示Form1而不是创建一个新实例。 最佳答案 一种解决方法是为Form1实例创建一个类级变量:public partial class Login : Form{ private Form1 pu; // code continued below...然后在按钮单击事件中,我们将隐藏登录表单,确保pu实例不为空(如果用户关闭表单而不是单击隐藏表单的按钮,则可能为null),并显示表单实例。如果实例为null,则它将创建一个新实例并连接事件处理程序。我们将pu和VisibleChanged事件都连接到将显示我们的登录表单的方法。请注意,在FormClosing事件中,我们实际上取消了关闭并隐藏了表单: private void btnLogin_Click(object sender, EventArgs e) { Hide(); if (pu == null) { pu = new Form1(label2.Text); pu.VisibleChanged += Pu_VisibleChanged; pu.FormClosing += Pu_FormClosing; } pu.Show(); } private void Pu_VisibleChanged(object sender, EventArgs e) { // Only show the login form if the form1 is NOT visible if (!pu.Visible) Show(); } private void Pu_FormClosing(object sender, FormClosingEventArgs e) { // Set cancel to true to prevent the form from closing, then hide the form instead e.Cancel = true; pu.Hide(); this.Show(); }}然后,您需要做的唯一其他更改是使form1按钮FormClosing成为表单,而不是将其关闭:public partial class Form1 : Form{ private void btnExit_Click(object sender, EventArgs e) { Hide(); } // rest of class code omitted...}关于c# - 在Winform中隐藏/显示2种形式,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/44439049/
10-09 01:18