- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我的 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 做了两件事:
一个更简单的示例,仅在所有表单关闭后才关闭应用程序:
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/
程序集,masm 嘿,我写了宏来打印存储在 dane1 段中的 1 字节值。 我将值除以 16,然后将提醒推送到堆栈,直到值==0。然后我弹出提醒将它们转换为 ASCII 码,并打印它们。 有人可以看
我在 Apache Geronimo 2.1.3 上有一个 Web 服务应用程序。 我正在使用 JAX-WS,使用 SOAP 1.1 注释 POJOS。 (使用 Sun JDK 1.5) 各种客户端都
我有一个数据变量,monthArray,它被多个消费者读取,并由单个定期更新程序线程定期更新数据。全部异步。 我已经考虑了这两个选项来安全地执行更新。 ArrayList tempArray
我有一组 3D 体。每个 Body 由 8 个点定义,每个点具有三个坐标。所有的物体都是立方体的或近似立方体的。我想用系统的点栅格“填充”立方体。坐标存储在简单的 data.frames 中。 我开发
我正在处理遗留代码,需要打补丁。 问题:一个古老的应用程序发送错误的 HTTP POST 请求。其中一个参数未经过 URL 编码。我知道这个参数总是排在最后而且我知道它的名字。我现在正尝试在运行在 t
我想在触摸屏幕时移动 sprite body ,但它不能发生...... -(void)ccTouchEnded:(UITouch *)touch withEvent:(UIEvent *)event
这个问题在这里已经有了答案: Can a union be initialized in the declaration? (3 个答案) 关闭 7 年前。 如果它是一个struct那么它就可以完成
我正在尝试获取生成 sigsys 信号的系统调用的地址!但我从 gcc 收到以下错误: gcc emulator.c -fms-extensions error: ‘siginfo_t’ has no
当我使用 Postman 进行 API 调用时,我收到一个 JSON 对象..这是我所期望的。 但是,当我像这样与 Guzzle 进行相同的调用时: $client = new \GuzzleHttp
在编码时,出现了差异。通常在编写简单的方法或构造函数时,我经常使用表达式体技术。但是,当我产生以下内容时: public class Sample : ISample { private r
我正在使用 LibGDX 创建一个新项目。 我想做的是,我将 tmx 文件中的主体加载到工作正常的关卡中。尸体也有一个 Sprite 。 问题是,我想让用户触摸场景中的某些 body 。当他们触摸 b
我的意图:在不使用 union 的情况下循环遍历一个结构的 30 个成员,所有成员都是字符数组类型,每个成员都存储对 itoa 的调用结果。在下面的代码中,我将结构体成员命名为a-z、A-D。在调用函
我必须将我的代码段之一从 C 转换为 java。代码如下。 union commandString{ char commndStr[20]; struct{ char
#include union NumericType { float value; int intvalue; }Values; int main() { Values.va
我在此代码中收到错误: fun num(num:Int):Int { if (num > 0){ print(num % 10) return num / 10
我是一名优秀的程序员,十分优秀!