打开一个新窗口,但不一定是它的新实例

时间:2012-01-12 08:48:31

标签: c# window show

我还处于c#的学习阶段,所以如果你认为这是一个愚蠢的问题,请不要开枪; - )

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

在主要方面,我按下了一个按钮,它会像这样进入window1:

private void Button_Click(object sender, RoutedEventArgs e)
{

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

}

现在,这可以正常工作,创建一个新的window1实例,并在关闭主窗口时显示它。

但是这里有一个问题:在window1中,一些东西可以改变,就像用户点击的按钮一样,然后当一个新按钮出现时,该按钮被隐藏。

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

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

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

首先我考虑将Window1 W1 = new Window1();放在按钮方法之外,但由于该“后退”按钮,这也不起作用。

我希望我能够很好地解释我想要做的事情。

有什么想法吗?

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

编辑1:

使用“chrfin”中的代码示例 某些部分会产生错误,例如“visible = true”部分 也许这是因为我使用快递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 part得不到任何东西。

任何想法?

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

编辑1:

Thanx再次“chrfin” 让它现在起作用:)

在main中:

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;

}
  • 解决了 -

5 个答案:

答案 0 :(得分:2)

你可以这样做:

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;
}

答案 1 :(得分:1)

有许多方法可以达到预期的效果。我将使用的方法如下:

Window1 W1 = null; // Initialise Field. 

private void Button_Click(object sender, RoutedEventArgs e)
{
    if (W1 == null) W1 = new Window1();
    W1.Show();
    this.Close();
}

答案 2 :(得分:0)

您也可以取消该活动。

答案 3 :(得分:0)

创建一个静态属性来存储W1的引用,并在Button_Click方法中检查它是否有一些值使用它,否则创建一个新的;

另一种选择是查看可通过Application.Current.Windows访问的应用程序对象中的打开窗口。

答案 4 :(得分:0)

这里可以有多个解决方案。

1)您可以保留用户在Windows1中所做的更改。无论何时重新启动Window1,都会将设置或之前的更改传递给它,以便Window1可以根据上一个状态重新调整自身

2)不要总是创建Window1的新实例并在后退按钮上关闭它,只需使用show and hide使window1对用户可见和不可见