【问题标题】:c# WinForms - Showing hidden window from static referencec# WinForms - 从静态引用中显示隐藏窗口
【发布时间】: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、登录/注销方法所在的类等。

标签: c# forms winforms


【解决方案1】:

您是否使用Application.Run(new MainForm()) 启动了您的应用程序?

如果你这样做了,那么它会使用关闭 UI 线程的事件处理程序注册 MainForm 的关闭事件。 这将处理所有表单,包括您的登录表单(假设您没有任何活动的非后台线程,将退出应用程序)。

Application.Run(Form)见msdn中的备注:https://msdn.microsoft.com/en-us/library/ms157902(v=vs.110).aspx

【讨论】:

  • 嘿。感谢您的回答,但实际上我是从 Application.Run(new Login) 开始申请的,所以这对我来说不是解决方案。
  • @DearDeer 您几乎可以肯定关闭Application.Run 中使用的表单或将其丢弃。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-05-25
  • 2016-06-19
  • 1970-01-01
  • 2010-11-25
相关资源
最近更新 更多