private void Wmain_Load(object sender, System.EventArgs e)
{
//this.Activate();
this.Visible=false;
//用户信息
UserInfo ui = new UserInfo();
//显示登录窗口
login Wlogin = new login( ref ui );
//密码正确
if( Wlogin.ShowDialog() == DialogResult.OK ) this.Visible=true;
//密码错误
if( Wlogin.ShowDialog() == DialogResult.Cancel) this.Close();

}
为什么在wlogin上要按两次cancel才能退出,怎么改成按一次就退出

解决方案 »

  1.   

    因为你Show了两次,应这样写:
    //密码正确
    if( Wlogin.ShowDialog() == DialogResult.OK ) 
      this.Visible=true;
    else
      this.Close();Wlogin.Dispose();
      

  2.   

    你不应该在主窗体的load事件中去打开login窗体,这样做所展现的现象,就如你所说,在登录不成功的时候主窗体会一闪。因此你需要在主窗体在load之前先判断login窗体是否正确返回,所以比较合理的位置是在程序的入口函数,即main函数,这方面参看如下这篇文章
    http://blog.csdn.net/knight94/archive/2006/04/06/652394.aspx
      

  3.   

    谢谢kssys明白了,我Wlogin.ShowDialog() 就打开一次窗体是吗.谢了.解决了.Knight94(愚翁):我现在这样写已经不出闪烁了.只要不用application.exit就不出了也谢谢你我的代码是加splash的(线程)所以写在load中打开wlogin窗口.Wmain中我没有static main()
      

  4.   

    是的,调用ShowDialog一次就显示一次。
      

  5.   

    http://blog.csdn.net/Reeezak/archive/2004/04/20/20536.aspx
      

  6.   

    从来没有上过CSDN的BLOG,居然发现N年前的文章跑到上面去了,登录窗体不要用this.visible之类的