一行代码解决VB.NET中Dialog窗体销毁不刷新主窗体

ShowDialog是VB.NET中模式窗体的调用方式。

如果使用VB.NET中的ShowDialog()方法调用子窗体后,你会发现在VB.NET中模式窗体的性质和VB6中有一些不同。

窗体的位置会被记住,每次打开的位置会与你上次关闭窗体的位置相同。如果在子窗体里进行过循环赋值你会发现,如果在赋值前没有对数组进行清空动作,数组会不断被不断累计。

导致出现这些问题的原则是因为在VB.NET中,被ShowDialog出来的窗体关闭后实际只是被隐藏了,而没有被销毁。既并没有执行Dispose。

如果要彻底销毁模式窗体就需要在Close或是窗体关闭按钮中加入Dispose()方法。但是这样又会出现另一个问题,在模式窗体被销毁的时候,主窗体会被重画。看到的现象就是主窗体整体闪动了一下,这对于一些客户来说是不友好的。

直接Close窗体没有被彻底销毁,如果强制执行Dispose(),主窗体有会被刷新。真的没有一个两全其美的办法吗?

其实,办法是有的而且很简单。还是Close()方法,只是位置稍有不同。

示例:

主窗体mainFrm 、子窗体subFrm

1 Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
2
3 subFrm.ShowDialog()
4 subFrm.Close()
5  End Sub

(程序在2010中编写,其他VS版本大家可以自己尝试一下是否会获取相同结果)

第四行的close()就实现了彻底销毁模式窗体的目的。办法很简单,大家可以自己尝试一下!

posted @ 2011-05-23 17:36  meil  阅读(4251)  评论(0编辑  收藏  举报