我仍处于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/