我非常 C#的新手,我正在尝试创建一个Windows窗体应用程序,它将创建相同窗体的多个实例并保持它们的存在,并结束他们都在某个按键上。现在,我在保持所述表格自动关闭方面遇到了一些困难。由于我是c#的新手,我不知道为什么。我也不知道在哪里寻找这样的问题,所以这个问题可能是重复的。到目前为止,这是我的(可能是严格屠杀的)主要代码(来自主文件,在本例中为Program.cs):
using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.InteropServices;
using System.Threading;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Windows.Input;
namespace WindowsFormProgram1
{
static class Program
{
/// <summary>
/// The main entry point for the application.
/// </summary>
///
[STAThread]
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
for (int i = 0; i < 15; i++)
{
new Form1().Show();
Thread.Sleep(100);
}
}
}
}
任何答案都会受到重视。正如我之前提到的,我对C#只有基本的了解,这可能只是重复。
答案 0 :(得分:4)
问题是因为您的代码比您想象的更早结束。
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
for (int i = 0; i < 15; i++)
{
new Form1().Show();
Thread.Sleep(100);
}
// code exit's here, thus closing all forms created.
}
为此,您可以在最后添加Application.Run()
调用,这将导致主线程等到指定的ApplicationContext
退出;在大多数情况下,上下文是一个表单,如在Application.Run(new Form1());
中,您只需要记住主线程将阻塞(即不继续)直到Application.Run
返回。所以你可以修改你的代码:
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
for (int i = 0; i < 14; i++) // <- note 14
{
new Form1().Show(); // will show the form
Thread.Sleep(100);
}
// This will show the form and block until the form is closed
Application.Run(new Form1());
}
此外,由于您想在按下某个键时关闭所有表单,您可以执行以下操作:
public static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
for (int i = 0; i < 15; i++) {
Form1 f = new Form1();
f.KeyPress += new KeyPressEventHandler(f_KeyPress);
f.Show();
}
// Note, no `new Form1()`; this will block until Exit is called.
Application.Run();
}
static void f_KeyPress(object sender, KeyPressEventArgs e)
{
// This will exit when ANY key is pressed on ANY form
Application.Exit();
}
这些只是实现您想要的几种方法,还有Form.ShowDialog
方法,但由于您只是在学习,我还会留下其他实施细节给你。
我也不知道在哪里寻找像这样的问题
.NET Framework Development Guide有很多关于从哪里开始以及如何继续的信息,以及关于.NET库的MSDN文档是当您对此感到好奇时使用的参考.NET类/函数的语法或操作。还有Visual Studio中的Object Browser,可以让您查看一些简短的文档。
希望这可以提供帮助。