【发布时间】: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 中的一些方法来进行刷新
-
我可以控制表单事件,但我应该刷新第一个表单,因为。当第二个表单关闭时,它序列化数据然后第一个表单读取新数据。
标签: c# winforms refresh repaint invalidation