一行代码解决VB.NET中Dialog窗体销毁不刷新主窗体
2011-05-23 17:36
567 查看
ShowDialog是VB.NET中模式窗体的调用方式。
如果使用VB.NET中的ShowDialog()方法调用子窗体后,你会发现在VB.NET中模式窗体的性质和VB6中有一些不同。
窗体的位置会被记住,每次打开的位置会与你上次关闭窗体的位置相同。如果在子窗体里进行过循环赋值你会发现,如果在赋值前没有对数组进行清空动作,数组会不断被不断累计。
导致出现这些问题的原则是因为在VB.NET中,被ShowDialog出来的窗体关闭后实际只是被隐藏了,而没有被销毁。既并没有执行Dispose。
如果要彻底销毁模式窗体就需要在Close或是窗体关闭按钮中加入Dispose()方法。但是这样又会出现另一个问题,在模式窗体被销毁的时候,主窗体会被重画。看到的现象就是主窗体整体闪动了一下,这对于一些客户来说是不友好的。
直接Close窗体没有被彻底销毁,如果强制执行Dispose(),主窗体有会被刷新。真的没有一个两全其美的办法吗?
其实,办法是有的而且很简单。还是Close()方法,只是位置稍有不同。
示例:
主窗体mainFrm 、子窗体subFrm
(程序在2010中编写,其他VS版本大家可以自己尝试一下是否会获取相同结果)
第四行的close()就实现了彻底销毁模式窗体的目的。办法很简单,大家可以自己尝试一下!
如果使用VB.NET中的ShowDialog()方法调用子窗体后,你会发现在VB.NET中模式窗体的性质和VB6中有一些不同。
窗体的位置会被记住,每次打开的位置会与你上次关闭窗体的位置相同。如果在子窗体里进行过循环赋值你会发现,如果在赋值前没有对数组进行清空动作,数组会不断被不断累计。
导致出现这些问题的原则是因为在VB.NET中,被ShowDialog出来的窗体关闭后实际只是被隐藏了,而没有被销毁。既并没有执行Dispose。
如果要彻底销毁模式窗体就需要在Close或是窗体关闭按钮中加入Dispose()方法。但是这样又会出现另一个问题,在模式窗体被销毁的时候,主窗体会被重画。看到的现象就是主窗体整体闪动了一下,这对于一些客户来说是不友好的。
直接Close窗体没有被彻底销毁,如果强制执行Dispose(),主窗体有会被刷新。真的没有一个两全其美的办法吗?
其实,办法是有的而且很简单。还是Close()方法,只是位置稍有不同。
示例:
主窗体mainFrm 、子窗体subFrm
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click subFrm.ShowDialog() subFrm.Close() End Sub
(程序在2010中编写,其他VS版本大家可以自己尝试一下是否会获取相同结果)
第四行的close()就实现了彻底销毁模式窗体的目的。办法很简单,大家可以自己尝试一下!
相关文章推荐
- 完美解决VB.NET窗体中预览DWG图形(附完整代码)
- vb.net从DataGridView复制到Excel.代码实现,解决中文乱码问题 (转载+亲自实践)
- vb.net 类中属性中的事件 并向新加窗体中用代码添加控件
- vb.net 类中属性中的事件 并向新加窗体中用代码添加控件
- vb.net 教程 3-5 窗体编程 对话框1 OpenFileDialog & SaveFileDialog
- vb.net用API函数getWindowRect()获取窗体位置信息失败解决
- 在DataGrid中实现无刷新编辑列的代码(VB.NET 2003)
- VB.net——窗体相互操作的问题解决
- asp.net 中为什么在showModalDialog弹出的窗体 用html 控件 刷新不了页面。而用服务器端控件 写C#代码可以刷新页面。但是用服务器端刷新页面不好。
- vb.net 代码建立控件,并显示在窗体上
- VB.NET章鱼哥出品—如何解决MDI子窗体被父窗体中的控件覆盖的问题
- [VB.NET]openFileDialog控件的问题:以下两种代码哪个更优化一些?
- vb.net 教程 3-5 窗体编程 对话框2 OpenFileDialog & FolderBrowserDialog
- vb.net 教程 3-5 窗体编程 对话框3 ColorDialog & FontDialog
- 解决WinForm(C#)中MDI子窗体最大化的问题(VB.net中也适用)
- VB.NET 设计视图窗体尺寸不对及解决方法
- VB.NET关闭窗体时最小化(附带解决.NET程序导致XP无法关机重启的问题)
- 一行代码解决各种IE兼容问题,IE6,IE7,IE8,IE9,IE10 (转)
- ASP.Net 2.0 窗体身份验证机制-转+自己代码注释示例与更详细的说明
- 一行代码解决iframe挂马