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