从另一个类关闭WPF程序

时间:2014-01-09 16:41:44

标签: c# wpf

我正在使用继承我的主窗口类的类。我试图关闭我的窗口,但似乎没有工作,并没有提供任何错误。也许我不明白这种继承的工作方式,但请帮助我理解。

我只是继承我的MainWindow类以尝试访问我的close方法。如果这不是最好的方法,请告诉我。

主窗口类:

public partial class MainWindow : Window
 {

    public MainWindow()
    {
        InitializeComponent();
    }

    protected void CloseProgram()
    {
        Close();
    }

    private void Go_Button_Click(object sender, RoutedEventArgs e)
    {
        ExcelOperations temp = new ExcelOperations();
        temp.Begin();
    }
}

来自我的其他班级:

class ExcelOperations : MainWindow
{

    private void MethodName()
    {
        try
        {
            // My Code Here
        }
        catch
        {
            // Show Error Message
            // I have tried this.Close(); but it does nothing
            this.CloseProgram(); // This also seems to do nothing
        }
    }
}

3 个答案:

答案 0 :(得分:2)

有多种方法可以做到这一点,但总的来说,我不会让一个班级负责结束你的申请。

您仍然可以处理类中的错误(显示错误),但随后将异常抛到链上,因此click事件可以关闭表单。

private void MethodName()
{
    try
    {
        // My Code Here
    }
    catch
    {
        // Show Error Message
        throw;
    }
}

返回主窗口:

private void Go_Button_Click(object sender, RoutedEventArgs e)
{
    try
    {
        ExcelOperations temp = new ExcelOperations();
        temp.Begin();
    }
    catch
    {
        // close the program
    }
}

编辑:

Servy提供了一个很好的解释,说明你遇到问题的原因。

  

这是因为ExcelOperations从未显示过。他认为通过继承主窗口他能够操纵它,只是因为他可以访问适当的方法,但它实际上是操纵(即关闭)第一个从未显示过的窗口。

所以ExcelOperations不应该从MainWindow继承(我知道你只是这样做以尝试从课程中关闭),那个特定的逻辑应该留在MainWindow本身。

答案 1 :(得分:0)

你有两个主窗口。启动应用程序时创建的MainWindow以及触发Go_Button_Click事件时创建的ExcelOperations窗口。

如果要显式关闭应用程序,Application.Shutdown()方法将为您执行此操作。

您还可以通过ShutdownMode

控制应用关闭的方式

答案 2 :(得分:0)

将您的MainWindow课程转到第二个ExcelOperations课程......并且不要继承MainWindow

class ExcelOperations
{
    private MainWindow parent;

    public ExcelOperations(MainWindow parent)
    {
      this.parent = parent;
    }

    private void MethodName()
    {
        try
        {
            // My Code Here
        }
        catch
        {
            // Show Error Message
            parent.Close();
        }
    }
}