主界面有一个重新登录按钮,点击按新实例化一个登录界面,重新登录后会重新New一个主窗口,在如何不关闭程序的情况下关闭旧的主窗口
if (loginIdentify != null)
{
LoginWindow loginWindow = new LoginWindow("", loginIdentify);
loginWindow.Show();
}
else
{
bool? flag = MessageWin.ShowWindow("是否退出当前账号登录?", this, MessageBoxButton.YesNo, new SolidColorBrush(Color.FromArgb(160, 0, 0, 0)));
if ((bool)flag)
{
////删除自动登录验证文件
//string filePath = Environment.CurrentDirectory + "\Login\login.txt";
//if (File.Exists(filePath))
//{
// File.Delete(filePath);
//}
////退出当前登录
LoginWindow loginWindow = new LoginWindow();
loginWindow.Show();
}
}
this.Close();
暂时关闭旧的主窗口执行的是this.close,但是导致整个程序退出
为啥不在重新登录后,更新主界面的显示数据
之前登录账号涉及到的数据、权限都和登录账号相关,直接New个新的主窗口会比较方便一点
@辉煌纪:
关闭旧的主窗口执行的是this.close前,做个分支,第一退出主界面(MainForm.Close()),第二退出程序(this.Close());
建议在题目中提供一下你用的什么技术
如果您想保持应用程序不关闭并关闭旧的主窗口,可以使用以下方法:
首先,将主窗口的Close()方法替换为Hide()方法,以将其隐藏而不是关闭它。
创建一个全局变量来存储当前的主窗口实例,以便稍后关闭它。
在重新登录时,使用新的主窗口实例替换旧的主窗口实例,并将旧的主窗口实例隐藏而不是关闭它。
以下是修改后的代码示例:
csharp
// 全局变量来存储当前主窗口实例
private MainWindow mainWindow;
if (loginIdentify != null)
{
LoginWindow loginWindow = new LoginWindow("", loginIdentify);
loginWindow.Show();
}
else
{
bool? flag = MessageWin.ShowWindow("是否退出当前账号登录?", this, MessageBoxButton.YesNo, new SolidColorBrush(Color.FromArgb(160, 0, 0, 0)));
if ((bool)flag)
{
// 创建新的主窗口实例
MainWindow newMainWindow = new MainWindow();
newMainWindow.Show();
// 隐藏旧的主窗口实例
mainWindow.Hide();
// 更新全局变量
mainWindow = newMainWindow;
}
}
// 关闭当前窗口实例
this.Hide();
这样,当您点击重新登录按钮时,旧的主窗口将被隐藏,新的主窗口将被创建并显示,而应用程序将继续运行,直到用户手动关闭它。
Hide是一种方法,但是不适合我的项目,我需要确保只有一个主进程在运行。
我的解决方式是将程序关闭方式选择为OnLastWindowClose,然后实例化登录窗口并将其show显示出来,然后执行主窗口关闭。
最后在关闭程序时需要确保程序完全退出。