You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在C#中实现窗体2关闭时自动执行窗体1的FormLoad逻辑

解决方案

首先建议你把窗体1的加载数据逻辑提取成独立方法,方便复用,避免重复代码:

// CustomerOverViewV1 窗体代码
private void CustomerOverViewV1_Load(object sender, EventArgs e)
{
    LoadCustomerData();
}

// 独立的加载数据方法
private void LoadCustomerData()
{
    CustomerManagement.GetCustomerPoliciesForOverview();
    Thread.Sleep(1000); // 注意:这个方法会阻塞UI线程,导致窗体假死,建议换成异步等待(见下文)
    CustomerManagement.GetCustomerOverViewV1();
    CustomerManagement.GetCustomerOverviewNote();
    SQLBilling.GetOverviewBillingDetails();
}

下面提供两种常用的实现方式:

方式1:利用ShowDialog返回值判断

在窗体1中打开窗体2时使用ShowDialog(),通过返回值判断是否需要刷新数据:

// 在CustomerOverViewV1中打开窗体2的代码
private void OpenCustomerDetailsForm()
{
    CustomerDetailsForm form2 = new CustomerDetailsForm();
    // 以模态方式打开窗体2
    if (form2.ShowDialog() == DialogResult.OK)
    {
        // 窗体2点击确定关闭后,触发数据刷新
        LoadCustomerData();
    }
}

同时在窗体2的确定按钮事件中设置返回值:

// 窗体2的确定按钮点击事件
private void btnOK_Click(object sender, EventArgs e)
{
    // 执行你的数据库更新逻辑
    UpdateCustomerDetails();
    
    // 设置DialogResult为OK,让窗体1能捕捉到
    this.DialogResult = DialogResult.OK;
    this.Close();
}

方式2:通过自定义事件触发刷新

如果窗体2是非模态打开(用Show()),可以通过自定义事件通知窗体1刷新:

步骤1:在窗体2中定义事件

// CustomerDetailsForm 窗体代码
// 定义客户更新完成事件
public event EventHandler CustomerUpdated;

private void btnOK_Click(object sender, EventArgs e)
{
    // 执行数据库更新逻辑
    UpdateCustomerDetails();
    
    // 触发事件,通知订阅者(窗体1)刷新数据
    CustomerUpdated?.Invoke(this, EventArgs.Empty);
    this.Close();
}

步骤2:在窗体1中订阅事件

// 在CustomerOverViewV1中打开窗体2的代码
private void OpenCustomerDetailsForm()
{
    CustomerDetailsForm form2 = new CustomerDetailsForm();
    // 订阅事件
    form2.CustomerUpdated += (sender, args) => {
        LoadCustomerData();
    };
    form2.Show();
}

优化建议

你代码中的Thread.Sleep(1000)会阻塞UI线程,导致窗体卡顿假死,建议替换为异步等待:

// 改成异步方法
private async void LoadCustomerData()
{
    CustomerManagement.GetCustomerPoliciesForOverview();
    await Task.Delay(1000); // 异步等待,不阻塞UI
    CustomerManagement.GetCustomerOverViewV1();
    CustomerManagement.GetCustomerOverviewNote();
    SQLBilling.GetOverviewBillingDetails();
}

内容的提问来源于stack exchange,提问作者Tom Dobing

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.24 05:05:17