为什么我不能调用new Window().ShowDialog()'2次在应用程序启动
本文关键字:2次 启动 应用程序 ShowDialog new 调用 Window 为什么 不能 | 更新日期: 2023-09-27 18:02:05
下面是XAML代码:
<Application x:Class="WpfApplication2.App"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Startup="Application_Startup" />
支持代码:using System.Windows;
namespace WpfApplication2
{
public partial class App : Application
{
private void Application_Startup(object sender, StartupEventArgs e)
{
new Window().ShowDialog();
new Window().ShowDialog();
}
}
}
窗口只显示一次,然后应用程序退出。为什么? ?
UPDATE:我知道windows应该显示结果。但是在我关闭第一个窗口后第二个窗口根本没有显示
试试这个
private void Application_Startup(object sender, StartupEventArgs e)
{
var w1 = new Window();
var w2 = new Window();
w1.ShowDialog();
w2.ShowDialog();
}
粘贴表单注释:
我认为当你关闭第一个窗口时,应用程序检查是否有其他窗口,它没有找到任何(所以应用程序正在关闭),因为第二个窗口还没有创建
我说这将连续而不是同时显示两个窗口是对的吗?当window1关闭时,window2将自动打开,因为调用ShowDialog()打开窗口,然后将焦点设置为它,并且在window1关闭之前不打开另一个?
您可以使用for循环来完成此操作。但是,我不知道为什么不能直接打电话。
for (int i = 0; i < 2; i++)
{
new Window().ShowDialog();
}
您可能会在用于关闭窗口1的代码中结束整个应用程序。如果您使用的是Environment.Exit(0);
,这可能是问题。
ShowDialog不允许你创建一个相同的表单,除非它关闭。
这是情态形式和非情态形式的区别。
我认为WPF也是同样的原因…
你可以看到↓
显示模式和非模式Windows窗体
更新:
测试Stecya的答案,它工作得很好…
protected override void OnStartup(StartupEventArgs e)
{
var w1 = new Window();
var w2 = new Window();
w1.ShowDialog();
w2.ShowDialog();
}