我仍处于C#的学习阶段,所以如果您认为这是一个愚蠢的问题,请不要射击我;-)

在项目中,我有一个主窗口,还有一个名为“ window1”的新窗口。

在主体上,我创建一个按钮,该按钮将转到window1,如下所示:

private void Button_Click(object sender, RoutedEventArgs e)
{

    Window1 W1 = new Window1();
    W1.Show();
    this.Close();

}


现在,这可以按预期工作,创建window1的新实例并在关闭主窗口时显示它。

但是这里有个要点:在window1中,某些内容可以更改,例如用户单击的按钮,然后在显示一个新按钮时隐藏该按钮。

我还在window1上做了一个后退按钮,它使用与上面相同的代码返回到mainWindow(所以现在是新的window1,但是新的mainwindow)

但是在这一点上,当我单击main时,再次在按钮上转到window1,该window1返回到默认状态。对我来说似乎合乎逻辑,因为它在使用按钮时会创建一个新实例。

但是,如果我想再次打开window1的第一个实例(已经由用户更改的实例),该怎么办?

首先,我想到了将Window1 W1 = new Window1();放在button方法之外,但是由于该“后退”按钮,这也无法正常工作。

我希望我能很好地解释我要做什么。

有什么想法吗?

=====================

编辑1:

使用“ chrfin”中的代码示例
有些部分会产生错误,例如“ visible = true”部分
也许这是因为我使用Express 2010,还是因为我使用WPF而不是表格?

在主要方面:

Window1 W1 = null; // Initialise Field.

private void CalcTabel_Click(object sender, RoutedEventArgs e)
{

    if (W1 == null)
    {
        W1 = new Window1();
        W1.MainWindow = this; //ERROR
        W1.Show();
    }
    else
        W1.Visibility = Visibility.Visible;
    this.Visibility = Visibility.Hidden;
}


在window1中

public MainWindow w1 { get; set; }

private void Quit_Click(object sender, RoutedEventArgs e)
{
    w1.Visibility = Visibility.Visible;
    this.Visibility = Visibility.Hidden;

}


现在我得到的主要错误是:
“ WpfApplication1.Window1”不包含“ MainWindow”的定义,该定义接受类型为“ WpfApplication1.Window1”的第一个参数(是否缺少using指令或程序集引用?)

只是删除该错误行,将导致get,set部分什么也得不到。

有任何想法吗 ?

=====================

编辑1:

再次感谢“ chrfin”
现在就可以工作了:)

在主要方面:

Window1 W1 = null; // Initialise Field.

private void CalcTabel_Click(object sender, RoutedEventArgs e)
{

    if (W1 == null)
    {
        W1 = new Window1();
        W1.Hoofdmenu = this;
        W1.Show();
    }
    else
        W1.Visibility = Visibility.Visible;
    this.Visibility = Visibility.Hidden;
}


在Window1中:

public MainWindow Hoofdmenu { get; set; }

private void Quit_Click(object sender, RoutedEventArgs e)
{

    Hoofdmenu.Visibility = Visibility.Visible;
    this.Visibility = Visibility.Hidden;

}



解决了 -

最佳答案

您可以执行以下操作:

Window1 w1 = null;

private void Button_Click(object sender, RoutedEventArgs e)
{
    if(w1 == null)
    {
        w1 = new Window1();
        w1.MainWindow = this; //create this property - see below
        w1.Show();
    }
    else
        w1.Visible = true;

    this.Visible = false;
}


在Window1内部:

public MainWindow MainWindow { get; set; }

private void ButtonBack_Click(object sender, RoutedEventArgs e)
{
    this.Visible = false;
    MainWindow.Visible = true;
}

关于c# - 打开一个新窗口,但并不总是一个新实例,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8832230/

10-12 18:22