我要调用第二个表单实例,并从第一个表单中单击按钮。在第二种形式中,如果第一种形式的用户名和密码不正确,则有一个SqlException会获取错误。如果SqlException发现错误,它将关闭第二个窗体并打开回第一个窗体。问题在于第二种形式保留在内存中,并且如果用户输入了不正确的用户名和密码100次,第二种形式的100个实例将保留在内存中,并且内存使用量正在堆积。我在第二个表单上也有一个按钮,可以让您回到第一个表单,我认为同样的事情也在发生。
我在表单之间切换的代码:
//first form called FormLogin
public FormLogin()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
this.Hide();
var nextForm = new Form1();
nextForm.ShowDialog();
nextForm.Activate();
nextForm.Show();
}
//SqlException in the second form called Form1
public Form1()
{
InitializeComponent();
}
catch (SqlException ex)
{
//MessageBox.Show(ex.Message);
//var backtologin = new FormLogin();
//backtologin.Show();
//backtologin.Activate();
this.Hide();
MessageBox.Show(ex.Message,"Incorrect password, or missing permission!");
FormLogin login = new FormLogin();
login.ShowDialog();
login.Activate();
this.Close();
}
//second form button for going back to the first form
private void logout_Click(object sender, EventArgs e)
{
this.Hide();
FormLogin login2 = new FormLogin();
login2.ShowDialog();
login2.Activate();
this.Close();
}
答案 0 :(得分:0)
这是您应该如何调用第二个表单实例的方法:
private void button1_Click(object sender, EventArgs e)
{
this.Hide();
var nextForm = new Form1();
nextForm.FormClosing += (s,e) => {
nextForm.Dispose(); // not always needed, but calling it doesn't hurt. It ensures the "nextForm" variable gets disposed, acts just like "using" statement.
this.Show();
};
try{
nextForm.Show();
}
catch(Exception e){
//manage your exception here
}
}
在这种情况下,请避免使用ShowDialog
,因为您可能会将这两种形式视为两个不同的“事物”。
答案 1 :(得分:0)
使用ShowDialog()
显示表单时,应使用using
子句
using(FormLogin login2 = new FormLogin())
{
login2.ShowDialog();
}
这样,在关闭login2后,它将被处置。