我有一个窗口,它会在显示之前进行一些检查。
#include <ngx_config.h> #include <ngx_core.h> #include <ngx_http.h>
如果&#34;做一些检查&#34;失败,上面的代码将在加载窗口后立即关闭我的窗口。然而,这太晚了,因为我可以看到窗口出现并消失。
如何在不显示窗口的情况下关闭窗口?
编辑: 构建MyDlg的人就像:
public class MyDlg : Window
{
public MyDlg()
{
Initialized += new EventHandler(Window_Initialized);
}
private void Window_Initialized(object sender, EventArgs eventArgs)
{
if (!/*do some checking*/)
{
Loaded += (s, e) => Close();
}
}
}
但是我很难阻止调用ShowDialog()&#39;因为它们是由其他人编写的(我试图在某些库中编写MyDlg)
答案 0 :(得分:1)
如何在不显示窗口的情况下关闭窗口?
在调用窗口的Show
或ShowDialog
方法之前执行检查。您可以在调用代码中执行此操作:
MyDlg dlg = new MyDlg();
//perform your check here...
dlg.ShowDialog();
...或在MyDlg
窗口的构造函数中:
public MyDlg()
{
//perform your check here...
}
显然,在调用Window_Initialized
事件处理程序时已经显示了窗口,因此如果您不希望窗口出现则执行任何检查都为时已晚。您无法关闭尚未打开的窗口。
答案 1 :(得分:0)
您可以在新窗口中创建启动对话框。
在窗口/对话框上设置IsEnabled = False。
或者,如果您的操作很快,则无需启动。只需隐藏你的窗口:
<Window x:Class="Wpf.Test01.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:Wpf.Test01"
xmlns:charting="clr-namespace:System.Windows.Controls.DataVisualization.Charting;assembly=System.Windows.Controls.DataVisualization.Toolkit"
mc:Ignorable="d"
IsEnabled="False"
WindowStyle="None"
AllowsTransparency="True"
Title="MainWindow" Height="350" Width="525">
<Window.Background>
<SolidColorBrush Opacity="0.0" Color="White" />
</Window.Background>
你可以在WPF Window with transparent background containing opaque controls
看到它完成当然,如果一切正常,则将属性更改回可见/默认值