在MainForm中的按钮点击事件showDialog了ValidateForm窗体,在ValidateForm窗体的按钮点击事件里调用this.Close();方法的时候MainForm同时也关闭了,麻烦帮忙解释一下什么原因,谢谢

解决方案 »

  1.   

    可以使用mdi的模式
    在子窗体关闭的时候
    this.MdiParent.Close();
    如果不是用mdi模式窗体可以使用sendmessage postmessage等api函数
    发送关闭窗体的消息
      

  2.   

    不是MDI模式的;
    就是主界面做某个功能的时候需要验证下用户是否有权限;
    showDialog了验证用户权限的窗体;
    在里边的取消按钮事件里调用this.Close()方法的时候主界面奇怪的关闭了
      

  3.   

    主界面中管理权限按钮事件
    private void 权限管理ToolStripMenuItem_Click(object sender, EventArgs e)
            {
                if (validateUser())
                {
                    AuthorizeForm af = new AuthorizeForm();
                    af.ShowDialog();
                }
                else
                {
                    MessageBox.Show("对不起,您没有权限进行此操作!");
                }
            }
    private bool validateUser()
            {
                LoginForm login = new LoginForm();
                login.ShowDialog();
                if (LoginForm.userID == "" || LoginForm.userID == null)
                {
                    this.Close();
                }
                if (LoginForm.roleID == "1")
                {
                    return true;
                }
                else
                {
                    return false;
                }
            }验证窗体LoginForm中取消按钮
    private void btnCancel_Click(object sender, EventArgs e)
            {
                this.Close();
            }
    迷茫ing...................
      

  4.   

    private bool validateUser() 
            { 
                LoginForm login = new LoginForm(); 
                login.ShowDialog(); 
                if (LoginForm.userID == "" || LoginForm.userID == null) 
                { 
                    login.Close(); 
                } 
                if (LoginForm.roleID == "1") 
                { 
                    return true; 
                } 
                else 
                { 
                    return false; 
                } 
            } 
      

  5.   

    因为在主窗体关闭时触发了
    Application.Dispose()
    这个事件
      

  6.   

    不会吧,估计你showDialog之后有个this.close()
      

  7.   

    this.close()把当前的主窗体给关掉了。。
    其实我觉得这个代码存在一定的问题:
    if (LoginForm.userID == "" || LoginForm.userID == null)//为什么要在这里判断呢?
    //在登录界面的按钮单击事件中判断是不是更好一些?
      

  8.   

    哈哈,你可能调用了main 窗体的this.close() 或者Application.Dispose()
      

  9.   

    private bool validateUser() 

        LoginForm login = new LoginForm(); 
        login.ShowDialog(); 
        if (LoginForm.userID == "" || LoginForm.userID == null) 
        { 
             this.Close();   // 这里的this指向主窗体,你调close当然是关程序了
        } 
    ...
    }
    怀疑这段代码是不是你写的,还问为什么看代码的意思就是登陆的用户ID为空,就把程序退出,好像也没什么不对,因为登陆都没有通过,显示登陆后的窗体也就没有必要了,是不安全的。另外login.ShowDialog()是阻塞的,login对话框不关闭,代码是不会往下面走的,ShowDialog完毕后,login会自己close,后面改成 login.Close()更是无稽之谈。
      

  10.   

    Application.Dispose()会关闭应用程序!
      

  11.   

    问题不是在 application.dispose() 上,你的逻辑错误了LoginForm login = new LoginForm();
        login.ShowDialog();
        if (LoginForm.userID == "" || LoginForm.userID == null)
        {
            this.Close();  // 这里的this指向主窗体,你调close当然是关程序了
        } 楼上的兄弟们也解释了,再强调一下 “逻辑”bug
    loginfrm 当你点击 cancel 时,关闭了,但是 窗体上的值满足:
    if (LoginForm.userID == "" || LoginForm.userID == null) 
    所以主窗体 主窗体 this.close() 了以后注意,安静的分析一下代码,切勿急躁。