winform打开新窗体关闭旧窗体

本文介绍了一种使用委托的方法来实现在Windows Forms应用程序中不同窗体之间的平滑切换。通过在旧窗体中启动新线程运行新窗体,并在新窗体加载完毕后关闭旧窗体的方式,实现了主页面不关闭的情况下进行流程页面的切换。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

项目需求,程序的主页面不关闭,当点击流程页面时候弹出新窗体,关闭旧窗体。利用委托实现了这个需求,直接上代码

旧窗体(Form3窗体)中代码:

private void button1_Click(object sender, EventArgs e)
        {
            //this.Hide();隐藏旧窗体
            //Form4 f = new Form4(FormClose);
            //f.ShowDialog();
            Thread th = new Thread(new ThreadStart(delegate
            {
                Application.Run(new Form4(FormClose));
            }));

            th.Start();
        }

        private void FormClose()
        {
            this.BeginInvoke(new MethodInvoker(delegate { this.Close(); }));
        }

新窗体(Form4窗体)中代码

    public Form4(Action act)
        {
            InitializeComponent();
            act();
        }




### 实现 WinForms 中打开窗体关闭当前窗体WinForms 应用程序中,可以通过隐藏当前窗体并显示一个窗体来实现此功能。具体来说,可以使用 `this.Hide()` 方法隐藏当前窗体,并通过创建目标窗体实例调用其 `ShowDialog()` 或 `Show()` 方法使其可见。 以下是基于引用中的代码片段[^2]的一个完整示例: ```csharp private void OpenNewFormAndCloseCurrent() { // 隐藏当前窗体 this.Hide(); // 创建窗体的实例 Form1 newForm = new Form1(); // 显示窗体作为模式对话框 newForm.ShowDialog(); // 当模式窗体关闭后,可以选择退出应用程序或者重显示原窗体 Application.Exit(); // 如果不再需要原始窗体,则可结束应用 } ``` 如果希望在登录成功的情况下自动切换到主窗体关闭登录窗体,可以在登录逻辑验证完成后调用上述方法。例如,在登录窗体的按钮单击事件处理程序中加入如下代码: ```csharp private void btnLogin_Click(object sender, EventArgs e) { // 假设此处完成身份验证逻辑 bool isAuthenticated = ValidateUserCredentials(); if (isAuthenticated) { // 调用方法以打开窗体关闭当前窗体 OpenNewFormAndCloseCurrent(); } else { MessageBox.Show("用户名或密码错误!"); } } // 辅助函数用于模拟用户认证过程 private bool ValidateUserCredentials() { string username = txtUsername.Text; string password = txtPassword.Text; return !string.IsNullOrEmpty(username) && !string.IsNullOrEmpty(password); } ``` 对于更复杂的场景,比如启动时加载特定窗体,还可以修改 `Program.cs` 文件中的入口点配置。例如,设置初始运行窗体为登录界面,并在其内部决定何时展示主要业务窗体[^3]。 #### 关键注意事项 - 使用 `Hide()` 替代直接调用 `Close()` 是为了防止某些情况下意外终止整个应用程序流程。 - 对于多线程环境下的交互需格外小心,确保 UI 更始终发生在主线程上。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值