c# - 打开一个新窗口,但并不总是它的一个新实例

标签 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 但新的 mainwindow)

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

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

首先,我想到将 Window1 W1 = new Window1(); 放在按钮方法之外,但这也行不通,因为那个“后退”按钮。

我希望我已经充分解释了我想做的事情。

有什么想法吗?

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

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

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

只是删除该错误行,将导致获取、设置部分无法获取任何内容。

有什么想法吗?

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

编辑 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;

}
  • 解决了-

最佳答案

你可以这样做:

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/

相关文章:

c# - 尝试循环访问 Form 上的 Button 控件时出现 'Unable to cast object of type' 错误

javascript - 从指向文档的变量中获取窗口对象

wpf - 在 Window 的标题栏中/上方添加 UserControl

c++ - 正则表达式查找 mp3 html 文件

javascript - 动画不透明度隐藏/显示

jquery - 在单个图像加载后显示 div

c# - 如何在 Quartz.net 每天同一时间开始工作?

c# - 将硬盘驱动器上的 NuGet 包(未托管在任何地方)添加到项目中

c# - 始终根据最新数组位置获取最旧数组索引的算法

javascript - 样式 ="display:block;"适用于 Chrome 但不适用于 Safari