[WinForm]关于在构造函数中关闭当前窗口

时间:2023-01-28 14:46:51
我现在程序是想这么写:


public form1
{
  ....

  if(err)
    this.close();
  ....
}


也就是在窗口的构造函数中如果判断出一个错误来,那么就不显示这个窗口,直接关闭。但是实际上,在构造函数中的this.close()并没有起到作用。有什么其它的方式可以实现我这个想法?或者给个思路。

P.S. this.close()放在OnLoad里面似乎也关闭不了。

12 个解决方案

#1


不要在构造函数中调用this.close(),否则入口函数中的Application.Run将得到一个已经Disposed的对象:

static void Main()
{
    Application.Run(new Form1());
}


在OnLoad中关闭窗口则没有问题:

protected override void OnLoad(EventArgs e)
{
    base.OnLoad(e);
    this.Close();
}


当然还可以这样:
static void Main()
{
    Form1 form1 = new Form1();
    if( form1.InitOk == false )
    {
        Application.Run( form1 );
    }
}

#2


在OnLoad里关闭窗口或Application.Exit()退出

#3


应该在构造函数中throw Exception,此时没有创建窗体对象。

#4


在Load事件中可以用
this.close()
关闭窗口的。你再试试看。

#5


如果form1不是应用程序启动的主窗口,也就是说是应用程序启动后,通过某个事件激发(例如点击了一个菜单或者按钮等)后,才去显示form1的,那么建议这么做:
if(条件成立,就是没有发生错误)
{
  form1 frm=new form1();
  form1.show();
}
else
{
  MessageBox.show(提示信息);
}

#6


up

#7


构造函数中Close会引发异常的。。

#8


构造函数中是不能关闭窗体的!
可以在LOAD事件中执行

#9


#10


你还是在构造函数中抛异常,或者你在这里返回值,在program.cs中进行判断是否运行form1
form1 form = new form1();
if(form1中判断条件==true)
{
Application.Run(form);
}

#11


楼上正解

#12


楼上正解

#1


不要在构造函数中调用this.close(),否则入口函数中的Application.Run将得到一个已经Disposed的对象:

static void Main()
{
    Application.Run(new Form1());
}


在OnLoad中关闭窗口则没有问题:

protected override void OnLoad(EventArgs e)
{
    base.OnLoad(e);
    this.Close();
}


当然还可以这样:
static void Main()
{
    Form1 form1 = new Form1();
    if( form1.InitOk == false )
    {
        Application.Run( form1 );
    }
}

#2


在OnLoad里关闭窗口或Application.Exit()退出

#3


应该在构造函数中throw Exception,此时没有创建窗体对象。

#4


在Load事件中可以用
this.close()
关闭窗口的。你再试试看。

#5


如果form1不是应用程序启动的主窗口,也就是说是应用程序启动后,通过某个事件激发(例如点击了一个菜单或者按钮等)后,才去显示form1的,那么建议这么做:
if(条件成立,就是没有发生错误)
{
  form1 frm=new form1();
  form1.show();
}
else
{
  MessageBox.show(提示信息);
}

#6


up

#7


构造函数中Close会引发异常的。。

#8


构造函数中是不能关闭窗体的!
可以在LOAD事件中执行

#9


#10


你还是在构造函数中抛异常,或者你在这里返回值,在program.cs中进行判断是否运行form1
form1 form = new form1();
if(form1中判断条件==true)
{
Application.Run(form);
}

#11


楼上正解

#12


楼上正解