例如,假设我在form 1中,那么我想:
发布于 2012-11-20 02:30:28
史蒂夫的解决方案不起作用。当调用this.Close()时,当前表单与form2一起被释放。因此,您需要隐藏它并将form2.Closed事件设置为调用this.Close()。
private void OnButton1Click(object sender, EventArgs e)
{
this.Hide();
var form2 = new Form2();
form2.Closed += (s, args) => this.Close();
form2.Show();
}
发布于 2017-06-23 19:28:26
其他答案已经描述了许多不同的方法。然而,它们中许多要么涉及ShowDialog()
,要么form1
保持开放但隐藏。在我看来,最好、最直观的方法是简单地关闭form1
,然后从外部位置(即不是从这两个表单中的任何一个)创建form2
。在Main
中创建form1
的情况下,可以简单地使用Application.Run
创建form2
,就像之前的form1
一样。下面是一个示例场景:
我需要用户输入他们的凭证,以便我以某种方式验证他们。之后,如果身份验证成功,我希望向用户显示主应用程序。为了实现这一点,我使用了两个表单:LogingForm
和MainForm
。LoginForm
具有确定身份验证是否成功的标志。然后,此标志用于决定是否创建MainForm
实例。这两个表单都不需要知道另一个表单,并且这两个表单都可以优雅地打开和关闭。以下是实现此操作的代码:
class LoginForm : Form
{
public bool UserSuccessfullyAuthenticated { get; private set; }
void LoginButton_Click(object s, EventArgs e)
{
if(AuthenticateUser(/* ... */))
{
UserSuccessfullyAuthenticated = true;
Close();
}
}
}
static class Program
{
[STAThread]
static void Main()
{
LoginForm loginForm = new LoginForm();
Application.Run(loginForm);
if(loginForm.UserSuccessfullyAuthenticated)
{
// MainForm is defined elsewhere
Application.Run(new MainForm());
}
}
}
发布于 2012-11-30 09:05:23
试着这样做。
{
this.Hide();
Form1 sistema = new Form1();
sistema.ShowDialog();
this.Close();
}
https://stackoverflow.com/questions/5548746
复制相似问题