[英]Problems Closing a C# Windows Form
我在关闭C#Windows窗体应用程序时遇到问题。 当前,它只会给我一个没有标题或任何内容的空白表格。 我需要找到一种方法来关闭这个未知的小窗口。
我有2个表单页面,一个用于登录屏幕,一个用于实际应用程序。 所有这些都由program.cs文件运行。
程式
...
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new PROG1());
}
这只是Visual Studio创建的用于运行我的程序的基本主体。
然后我们有主程序
PROG1.cs
...
public PROG1()
{
Login LoginForm = new Login();
DialogResult a = LoginForm.ShowDialog();
if(LoginForm.ValidLogin == 1) {
InitializeComponent();
} else {
Application.Exit(); //FAIL
}
}
您可以看到,第一个program.cs文件调用PROG1.cs,该文件调用login.cs的实例。 如果您输入有效的登录名,则登录页面将关闭,主PROG1将显示为应有的状态。 但是,如果您仅单击红色的X来关闭登录表单,它将出现在Prog1和LoginForm.ValidLogin!= 1上,因此它不会初始化该表单,而是将尝试关闭该表单。 这只会给我留下未初始化的表格,而不是将其关闭。 如果我执行this.close(),它将给我运行时错误。
有任何想法吗?
将InitializeComponent调用放回到以前的顶部。 尝试使用未初始化的变量,包括试图告诉它们关闭自身,是一个坏主意。
配置PROG1表单的属性,以便初始状态将被隐藏而不是显示。 LoginForm返回后,您的PROG1代码可以决定是显示自己还是关闭自己。
是因为InitializeComponent()方法的内容需要很长时间才能运行,所以您不对表单进行初始化的原因吗? 似乎您应该将程序简化为:
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
LoginForm login = new LoginForm();
if (login.ShowDialog() == DialogResult.OK &&
login.ValidLogin == 1)
Application.Run(new PROG1());
}
并从PROG1的构造函数中删除逻辑。
您不应在构造函数中执行类似的操作。
有一个新的输入表单,该表单几乎不显示或不显示任何内容,并在Load
事件或主表单的Load
事件中显示登录表单。 如果显示模式对话框,则他们将无法访问您的父窗体,如果他们无法登录,则可以关闭父窗体。
我会建议塞缪尔(Samuel)建议的最佳做法。 但是,如果您想快速完成操作,请尝试将登录逻辑移至Visual Studio生成的Main:
在Program.cs中
[STAThread]
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Form2 login = new Form2();
if (login.ShowDialog() == DialogResult.Yes)
{
Application.Run(new Form1());
}
}
在Form2.cs中
private void button1_Click(object sender, EventArgs e)
{
this.DialogResult = DialogResult.No;
this.Close();
}
private void button2_Click(object sender, EventArgs e)
{
this.DialogResult = DialogResult.Yes;
this.Close();
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.