Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/300.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 隐藏窗口的实例_C#_Wpf_Instance_Show Hide - Fatal编程技术网

C# 隐藏窗口的实例

C# 隐藏窗口的实例,c#,wpf,instance,show-hide,C#,Wpf,Instance,Show Hide,如何在另一个方法中隐藏在一个方法中创建的窗口实例 我有一个带有“注册”按钮的登录窗口,当您单击该按钮时,注册窗口打开,登录窗口隐藏(工作正常)。 现在的问题是,我在注册窗口上有一个按钮“后退”,它应该隐藏注册窗口并显示登录窗口。 我可以用“Application.Current.MainWindow.show();”来显示登录窗口,但我不知道如何隐藏注册窗口。通常我只会选择“Regis.Hide()”,但我不能这样做,因为我在方法中有Regis的实例,它会打开Register窗口 我明白,如果我

如何在另一个方法中隐藏在一个方法中创建的窗口实例

我有一个带有“注册”按钮的登录窗口,当您单击该按钮时,注册窗口打开,登录窗口隐藏(工作正常)。 现在的问题是,我在注册窗口上有一个按钮“后退”,它应该隐藏注册窗口并显示登录窗口。 我可以用“Application.Current.MainWindow.show();”来显示登录窗口,但我不知道如何隐藏注册窗口。通常我只会选择“Regis.Hide()”,但我不能这样做,因为我在方法中有Regis的实例,它会打开Register窗口

我明白,如果我在第二个方法中创建第二个实例并隐藏它,那将不起作用,因为现在有两个独立的实例。 但正如我所说,我也不知道该怎么做

OpenRegistrationGui:

ICommand _RegisterBack;
public void Open()
{
    Application.Current.MainWindow.Hide();
    Register regis = new Register();
    regis.Show();
}

public ICommand RegisBackCommand
    {
        get
        {
            if (_RegisterBack == null)
            {
                _RegisterBack = new RelayCommand(
                    param => Back()
                    );
            }
            return _RegisterBack;
        }
    }

public void Back()
{
    Application.Current.MainWindow.Show();
    //I Want to Hide the Regis here, but i cant use the Instance from above.
}
MyViewModel:

OpenRegistrierungsGUI RegisGUI = new OpenRegistrierungsGUI();
public ICommand RegisBack
    {
        get => RegisGUI.RegisBackCommand;
        set => RegisBack = RegisGUI.RegisBackCommand;
    }
Open()方法也是如此


我想要的结果是注册窗口隐藏,登录窗口显示。

这将通过使
regis
成为整个类都可以访问的成员变量来解决您的问题

private Register regis;

public void Open()
{
    Application.Current.MainWindow.Hide();

    // Create the register window, if it doesn't exist
    if (regis == null)
    {
        regis = new Register();
    }

    regis.Show();
}

public void Back()
{
    // hide the register window, if it exists
    if (regis != null)
    {
        regis.Hide();
    }

    Application.Current.MainWindow.Show();
}

有不同的方法可以做到这一点,但这一种方法只能确保注册窗口的一个实例,并为您提供所需的显示/隐藏功能。

只需使用
regis.hide()希望它对您有用

private Register regis;
 public void Back()
        {
        Application.Current.MainWindow.Show();
        regis.hide();
        }

在这里,您希望将一个函数变量使用到另一个函数变量中

全局声明regis,而不是在第一次使用它的方法中初始化它

这样,只有一个regis实例

现在你可以做了

regis.Hide()

在你们班的任何方法中

我找到了解决方案:

我启动了Open()方法(它工作得非常好)。 当我想启动Back()方法时,我意外地创建了一个“OpenRegistrationGui”实例并试图关闭它,但它显然无法关闭,因为它是另一个实例。 我将属性“RegisBackCommand”设置为静态,现在直接从ViewModel启动它,现在可以工作了


无论如何。。。谢谢大家的快速回答和帮助

首先谢谢你的快速回答。但遗憾的是,当我执行此操作时,当方法Back()激发时,我得到一个System.NullReferenceException。regis的值为null。我假设
Back()
只有在显示注册表后才会触发。我将在其中添加第二个空检查以进行健全性检查。您是对的,Back()只能在显示注册后启动。该按钮仅存在于表单注册中。空检查是完美的,但它仍然不会隐藏注册表。在这种情况下,其他的东西会停止工作,因为代码应该可以正常工作。是否只有一个类实例具有
Open()
Back()
方法,它们是如何调用的?另外,
Regis
实际上是windows窗体吗?是的,只有一个注册实例。注册不是WinForms,它的WPF和regis只是实例的名称。
regis
只存在于
Open()
方法中,因为它是在那里声明的。该方法之外的任何东西都不知道该变量。嗨,阿彻,请投票给我,我改进了格式。这对我不起作用,当Back()触发时,我在regis上遇到一个SystemNullReferenceException。
regis.Show()