Winforms 如何中断窗口窗体的构造函数?
我有一个简单的应用程序:Winforms 如何中断窗口窗体的构造函数?,winforms,Winforms,我有一个简单的应用程序: static class Program { /// <summary> /// The main entry point for the application. /// </summary> [STAThread] static void Main() { Application.EnableVisualStyles(); Application.SetCompa
static class Program
{
/// <summary>
/// The main entry point for the application.
/// </summary>
[STAThread]
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new Form1());
}
}
我知道我可以在申请前检查一些条件。运行,但很难更改(相信我)。我需要检查Form1构造函数中的一些条件。如果某个_条件==true且答案为否-->应用程序将关闭。在表单加载事件中更容易实现这一点。您只需调用Close()
在构造函数中调用Close()将导致问题,因为窗口尚未打开。您将得到一个仍在尝试打开的已释放窗口。构造函数的目的是创建对象的实例。因此,它不应该失败,除非对象的某个前提失败。在这种特殊情况下,您唯一的选择是抛出异常 换句话说:你调用一个对象的构造函数来创建这个对象的实例,所以这是一个原子函数,除非你有技术问题,否则不应该失败 现在,您要做的是避免表单在某些条件下显示。有一些方法可以做到这一点。首先,让我们看一下代码:
Application.Run(new Form1());
这个代码段做了两件事:创建Form1
的实例并显示它(通过将其提供给Application.Run
)。因此,一个选择是:
// snippet at program.cs
Form1 mainForm = new Form1();
if (mainForm.IsValid)
{
Application.Run(new Form1());
}
// snippet at Form1.cs
public bool IsValid
{
get
{
// evaluate all conditions that should determine if the form is to be showed.
return condition;
}
}
在program.cs中添加代码以检查表单是否有效。一种方法是将其作为表单中的属性公开。当然,如果您正在跟踪,这可能是您域的一个方法/属性,但将其放在何处取决于您的调用
此方法/属性(在我的代码中称为“IsValid”)负责检查表单是否可以在当时显示
请记住在程序中将逻辑与表示分离
那就行了 把逻辑放在一个静态的形式方法中。所以你甚至可以在创建表单之前调用它。对不起,这么长时间以来,我一直认为我检查了你的答案是有用的。@alexander:嘿,没问题!谢谢,我希望答案是有用的。
// snippet at program.cs
Form1 mainForm = new Form1();
if (mainForm.IsValid)
{
Application.Run(new Form1());
}
// snippet at Form1.cs
public bool IsValid
{
get
{
// evaluate all conditions that should determine if the form is to be showed.
return condition;
}
}