我在C#和WPF中编写一个简单的东西。我有一个带按钮的MainWindow。如果我触发按钮,它会打开一个secon窗口:
private void btnF4_Click(object sender, RoutedEventArgs e)
{
SecondWindow second = new SecondWindow();
second.Show();
}
当然,如果我触发按钮三到四次,我会打开三个或四个窗口。我不想使用ShowDialog(),但我想只打开第二个窗口一次。我的意思是,如果我触发按钮并且窗口已经打开,则应该没有任何反应。
谢谢!
答案 0 :(得分:1)
将second
实例变量设为父窗口类,只创建一个新窗口(如果尚未创建)。
当然,当第二个窗口关闭时,你需要确保null
实例变量。
public class ParentWindow ...
{
private SecondWindow m_secondWindow = null;
....
private void btnF4_Click(object sender, RoutedEventArgs e)
{
if (m_secondWindow == null)
{
m_secondWindow = new SecondWindow();
m_secondWindow.Closed += SecondWindowClosed;
m_secondWindow.Show();
}
}
public void SecondWindowClosed(object sender, System.EventArgs e)
{
m_secondWindow = null;
}
}
这可能会缩短为以下几点:
public class ParentWindow ...
{
private SecondWindow m_secondWindow = null;
....
private void btnF4_Click(object sender, RoutedEventArgs e)
{
if (m_secondWindow == null)
{
m_secondWindow = new SecondWindow();
}
m_secondWindow.Show();
}
}
但是,我不确定你是否真的可以“重新开启”之前关闭的窗口。如果需要在重新打开时重新初始化窗口,请使用第一个代码。如果您可以使用显示先前内容的窗口,请使用第二个。
答案 1 :(得分:0)
在父窗口类中声明SecondWindow
而不是方法。
public class MainWindow : Window {
SecondWindow second = new SecondWindow();
private void btnF4_Click(object sender, RoutedEventArgs e) {
if (!second.IsActive) {
second.Show();
}
}
}
在方法中声明second
将使second
窗口在该方法中处于本地状态,这意味着每次单击该按钮都会创建该类的新实例(窗口)