当另一个表单关闭时如何刷新一个表单?

Posted

技术标签:

【中文标题】当另一个表单关闭时如何刷新一个表单?【英文标题】:How can I refresh One form when the other form is closed? 【发布时间】:2014-08-27 00:04:43 【问题描述】:

我一直在用 C# 开发项目。

它有两种形式,它们相互连接。

我想在关闭第二个表单时这样做,刷新第一个表单。

如果我使用 Thread 的 Sleep 程序会很累。我想通过结束活动来做到这一点。我该怎么办?(就像java的重绘)

代码如下Form1

public static Form1 form;
    public Form1()
    
        InitializeComponent();
        form = this;
    

    private void button11_Click(object sender, EventArgs e)
    
        Form2 yeniform = new Form2();
        yeniform.Show();

    

Form2(关闭按钮)

 private void button1_Click(object sender, EventArgs e)
    

            Form1.form.Invalidate();
            Form1.form.Refresh();
            this.Close();
    

【问题讨论】:

小心对象引用!您在按钮单击处理程序中创建Form2,之后对Form2 的引用超出范围,因此Form2 对象有资格进行垃圾回收。 GC 可能会在您有机会点击按钮之前销毁Form2 您是否考虑过以模态方式显示 form2? (显示对话框) 你真正想做什么? 为什么第一种形式必须重新绘制自己?您可以使用closing 事件来触发第一种形式的事情,但首先要解释问题所在!如果你知道你想使用closing 事件,那为什么不干脆去做呢? 在 Form1() 将打开的每个表单上创建一个事件,并使 Form1 订阅此事件,并在关闭其他表单时触发它们的 EventHandler 并通知 Form1。另一种方法是通过引用所有其他表单来传递 Form1,以便在关闭时它们也可以调用 Form1 中的一些方法来进行刷新 我可以控制表单事件,但我应该刷新第一个表单,因为。当第二个表单关闭时,它序列化数据然后第一个表单读取新数据。 【参考方案1】:

在您的第一个表单中绑定Form_Closing 事件。

//Form1
private void button11_Click(object sender, EventArgs e)

    Form2 yeniform = new Form2();
    yeniform.FormClosing += new FormClosingEventHandler(this.Form2_FormClosing);
    yeniform.Show();


private void Form2_FormClosing(object sender, FormClosingEventArgs e)

    //Do your stuff here.

【讨论】:

【参考方案2】:

' 第二种形式的要关闭的按钮 ' form1是form 2关闭时要重新加载的form

private void btn_close_Click(object sender, EventArgs e) form1.close() '在关闭form2之前卸载form 1 form1.show() ' 表格 1 重新加载 unload(me) '关闭 form2 结束子

【讨论】:

【参考方案3】:

这是一个工作示例。在父窗体中

private void barButtonItem1_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)

    VendorsAddForm f = new VendorsAddForm();
    f.StartPosition = FormStartPosition.CenterScreen;
    f.FormClosed += new FormClosedEventHandler(child_FormClosed);
    f.Show();


void child_FormClosed(object sender, FormClosedEventArgs e)

    this.Refresh();
    var query = dbContext.AccountObjects.Where(p => p.IsVendor == true).ToList();
    accountObjectsBindingSource.DataSource = new BindingList<AccountObject>(query);

注意:子表单是VendorsAddForm

感谢https://www.daniweb.com/posts/jump/1302760,我从那里学到了。

【讨论】:

以上是关于当另一个表单关闭时如何刷新一个表单?的主要内容,如果未能解决你的问题,请参考以下文章

当另一个 HTML 页面向其发布表单时,HTML 页面会引发 405 错误

访问VBA无法刷新表单

如何在表单提交时防止表单在刷新时重新提交

单击另一个表单上的保存按钮后如何刷新以前的表单

如何在子表单打开时冻结父表单

保留文本框的先前值,直到表单关闭