c# - 完全关闭辅助窗口

标签 c# wpf windows user-interface

第二个窗口似乎没有关闭。这就是我正在做的......

  • 我创建了一个新的 WPF 项目。

  • 我在主窗口中放置了一个按钮。

  • 我将以下代码放在按钮中以启动第二个窗口并隐藏主窗口。

    private void button1_Click(object sender, RoutedEventArgs e)
    {
        var projectWindow = new NewProjectInfo();
        this.Hide();
        projectWindow.Show();
    }
    

-新窗口是一个空白窗口,上面什么也没有。

-在新窗口的“关闭”事件中,我放置了再次显示主窗口的代码。

    private void Window_Closed(object sender, EventArgs e)
    {
        var mainWindow = new MainWindow();
        mainWindow.Show();
    }
  • 如果我运行该程序并关闭主窗口而不打开第二个窗口,程序会像我希望的那样结束。

  • 如果我单击主窗口上的按钮,将我带到第二个窗口,然后关闭该窗口,将我带回主窗口,然后关闭主窗口程序不会结束。 (这意味着我必须在 visual studio 中点击停止按钮才能结束)

这就像访问第二个窗口会留下某种正在运行的进程。

所以,当我关闭主窗口时,我可以运行:

 Application.Current.Close();

但是这样安全吗?我是否有机会留下一些东西?或者有没有更好的方法来关闭第二个窗口,这样当我关闭主窗口时程序就会结束?

最佳答案

这些行

   var mainWindow = new MainWindow(); 
   mainWindow.Show(); 

创建一个新的 MainWindow 并显示它。原来的 MainWindow 仍然隐藏。

要解决您的问题,您需要引用原始 MainWindow 实例。
也许您可以在构建辅助窗口时传递此引用

// Create a NewProjectInfo instance and pass this 
var projectWindow = new NewProjectInfo(this); 
this.Hide(); 
projectWindow.Show(); 

并且在projectWindow的构造函数中,将传入的引用保存在一个全局变量中

var MainWindow _originalReference;

public NewProjectInfo(MainWindow original)
{
    _originalReference = original;
}

现在窗口关闭事件可以使用引用的窗口

private void Window_Closed(object sender, EventArgs e)   
{   
    _originalReference.Show();   
}   

关于c# - 完全关闭辅助窗口,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11075435/

相关文章:

c# - C++/CLI 获取 "wrapper"类对象以显示在 C# 中

WPF:如何在拖动 ListView 项目时允许在 ListView 中使用鼠标滚轮滚动?

wpf - 绑定(bind)到画笔的颜色

windows - 将我的 cloudService 内容从 Subscription1 复制到 Subscription2

windows - 在我的应用程序激活之前检测哪个窗口处于事件状态

c# - 在 C# 中终止远程计算机上的进程

C# 如何通过管理员提升的 cmd 运行进程(带参数)

c - 在 Windows 上查找 C 代码中的内存泄漏

c# - Visual Studio 2010 中的构建问题

C# WPF HELIX 3D 如何获取模型的 Material 并使其成为可用 Material