gpt4 book ai didi

c# - C#应用程序启动时显示多个窗体

转载 作者:太空狗 更新时间:2023-10-29 20:45:36 26 4
gpt4 key购买 nike

我的 C# 应用程序中有 3 个表单——Form1、Form2 和 Form3。目前,当我的应用程序启动时,它会加载 Form1。我希望所有三种形式都在应用程序启动时打开。

我尝试在 Program.cs 中这样做:

static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new Form1());
Application.Run(new Form2());
}

但是Form2只有在Form1关闭后才会出现。

如何让所有 3 个表单在应用程序启动时同时显示?

最佳答案

通常,让您的应用程序执行默认操作以外的操作(打开一个表单,等待它关闭,然后退出)的正确方法是创建一个继承自 ApplicationContext 的类。然后将您的类的一个实例传递给 Application.Run 方法。当应用程序应该关闭时,从您的类中调用 ExitThread()

在这种情况下,您可以在应用程序加载时创建三种形式的实例,并为它们的 Closed 事件注册一个处理程序。当每个表单关闭时,处理程序将检查是否还有任何其他表单仍然打开,如果没有则关闭应用程序。

The example on MSDN 做了两件事:

  1. 打开多个表单并在它们全部关闭时退出应用程序
  2. 在关闭每个表单时保存表单的最后大小和位置。

一个更简单的示例,仅在所有表单关闭后才关闭应用程序:

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();
}
}

然后,您的 Program 类如下所示:

static class Program {
[STAThread]
static void Main() {
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new MyApplicationContext());
}
}

应用程序关闭逻辑显然可以定制 - 任何表单是否仍然打开,或者只有这三种类型中的一种,或者只有前三个实例(这需要持有对前三个实例的引用,可能在 List<Form> 中) .

回复:每个表单创建的全局事件——this 看起来很有希望。

类似的例子 here

关于c# - C#应用程序启动时显示多个窗体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13406077/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com