2012-01-12 52 views
3

我仍然在C#的学习阶段,如果你认为这是一个愚蠢的问题;-)打开一个新的窗口,但并不总是它的一个新实例

在该项目中,所以不要拍我我有主窗口,一个被称为“窗口1”

在主要的新窗口,我做的按钮时,会去窗口1这样的:现在

private void Button_Click(object sender, RoutedEventArgs e) 
{ 

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

} 

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

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

而且我做了窗口1后退按钮,使用上述同样的代码,回到主窗口(所以现在新的窗口1,但新的主窗口)

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

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

首先我想将Window1 W1 = new Window1();放在按钮方法的外面,但是由于那个“后退”按钮,这也不起作用。

我希望我解释得很清楚我想做什么。

有什么想法吗?

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

EDIT 1:

使用从 “chrfin” 某些部分genarate错误代码示例中,像“可见=真”部分 也许这是因为我使用快递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; 
} 
在窗口1

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指令或程序集引用?)

just删除该错误行,将导致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; 
} 
在窗口1

public MainWindow Hoofdmenu { get; set; } 

private void Quit_Click(object sender, RoutedEventArgs e) 
{ 

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

} 
  • 解决 -
+0

也许juste设置可见false? – 2012-01-12 08:52:38

+0

我认为你可以'隐藏'窗口窗体并在以后将它带回 – V4Vendetta 2012-01-12 08:59:55

+0

+1:在SO上,没有这样的事情是愚蠢的问题,只是严重问的问题。每个人都必须学习,只要他们努力使自己的问题清楚明白(你有) – 2012-01-12 11:22:08

回答

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

和内窗口1:

public MainWindow MainWindow { get; set; }  

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

这确实是我一直在寻找的东西。谢谢 – Dante1986 2012-01-12 09:00:49

+0

...但是,当你想关闭应用程序时不要忘记关闭窗口...... – ChrFin 2012-01-12 09:07:56

+0

......在这种情况下,有没有像关闭所有的东西?或退出按钮我需要关闭他们一个接一个? – Dante1986 2012-01-12 11:13:01

0

你也可以取消该事件。

0

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

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

0

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

1)您可以保留用户在Windows1中所做的更改。无论何时您重新启动Window1,都会传递设置或先前的更改,以便Window1可以根据最后一个状态重新进行自我调整

2)不是始终创建Window1的新实例,而是关闭后退按钮使用显示和隐藏,使窗口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(); 
} 
+0

Thanx!我看到“chrfin”更详细一点,不过谢谢你! – Dante1986 2012-01-12 09:01:33

相关问题