【发布时间】:2015-06-25 21:28:51
【问题描述】:
我在 WinForms 项目中传递对我的窗口的引用然后检索它们时遇到问题。 当我创建另一个(主)表单并在按钮事件中隐藏登录表单时,我有登录表单(我不想在这里破坏登录引用,所以我将它保存在静态类中):
private void btnLog_Click(object sender, EventArgs e)
{
if (CheckIfPasswordIsCorrect((int)DataSetUsers.Tables[0].Rows[cmbUsers.SelectedIndex][0]
, txtPassword.Text.Trim()))
{
GlobalData.LoginFormRef = this; //passing reference to Login form into static class
this.Hide(); //hidding Login form
MainForm mainForm = new MainForm();
mainForm.Show();
}
else
{
MessageBox.Show("Wrong password");
txtPassword.Focus();
}
}
GlobalData 是带有静态对象 GlobalData.LoginFormRef 的静态类,因此我可以保留我的登录表单引用。
然后,如果我从主表单注销并想返回登录表单,我会收到错误消息,或者只是我的应用程序关闭:
private void btnLogOut_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
{
GlobalData.LoggedUser = null;
if (GlobalData.LoginFormRef != null)
{
GlobalData.LoginFormRef.Show(); //trying to show my login form back
}
this.Close(); //closing Main form
this.Dispose(true); //destroying main form
}
当我关闭我的主表单并尝试调用登录表单时,它会立即消失,或者我收到错误 System.ObjectDisposedException 。我不明白为什么。我在静态类中有对登录表单的引用....如何销毁主表单并再次显示登录表单?
【问题讨论】:
-
听起来错误不在您期望的位置。我认为您需要展示更多代码,例如
GlobalData、登录/注销方法所在的类等。