我还处于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;
}
答案 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对用户可见和不可见