我的C#应用程序中有3个表单 - Form1,Form2和Form3.目前,当我的应用程序启动时,它会加载Form1.我想在应用程序启动时打开所有三个表单.
我尝试这样做 Program.cs:
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new Form1());
Application.Run(new Form2());
}
Run Code Online (Sandbox Code Playgroud)
但Form2仅在Form1关闭后显示.
如何在应用程序启动后立即同时显示所有3个表单?
Zev*_*itz 18
通常,让应用程序执行除默认操作之外的其他操作(打开表单,等待它关闭,然后退出)的正确方法是创建一个继承自的类ApplicationContext.然后将类的实例传递给Application.Run方法.当应用程序关闭时,请ExitThread()在您的班级内打电话.
在这种情况下,您可以在加载应用程序时创建三个表单的实例,并为其Closed事件注册处理程序.当每个表单关闭时,处理程序将检查是否还有其他表单仍然打开,如果没有则关闭应用程序.
MSDN上的示例做了两件事:
一个更简单的示例,仅在关闭所有表单后关闭应用程序:
class MyApplicationContext : ApplicationContext {
private void onFormClosed(object sender, EventArgs e) {
if (Application.OpenForms.Count == 0) {
ExitThread();
}
}
public MyApplicationContext() {
//If WinForms exposed a global event that fires whenever a new Form is created,
//we could use that event to register for the form's `FormClosed` event.
//Without such a global event, we have to register each Form when it is created
//This means that any forms created outside of the ApplicationContext will not prevent the
//application close.
var forms = new List<Form>() {
new Form1(),
new Form2(),
new Form3()
};
foreach (var form in forms) {
form.FormClosed += onFormClosed;
}
//to show all the forms on start
//can be included in the previous foreach
foreach (var form in forms) {
form.Show();
}
//to show only the first form on start
//forms[0].Show();
}
}
Run Code Online (Sandbox Code Playgroud)
然后,你的Program班级看起来像这样:
static class Program {
[STAThread]
static void Main() {
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new MyApplicationContext());
}
}
Run Code Online (Sandbox Code Playgroud)
应用程序关闭逻辑显然可以自定义 - 任何表单仍然是打开的,或者只是这三种类型中的一种,或者只有前三个实例(需要保存对前三个实例的引用,可能在a中List<Form>).
Re:每个表单创建的全局事件 - 这看起来很有希望.
类似的例子在这里.
Alb*_*nbo 10
从Form.Load事件开始其他形式Form1.
private void Form1_Load(object sender, EventArgs e)
{
Form2 form2 = new Form2();
form2.Show();
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
23198 次 |
| 最近记录: |