vb2008中设置弹出窗口的问题

来源:百度知道 编辑:UC知道 时间:2024/07/07 18:05:46
我想运行一个程序,时间很长,向让它弹出一个正在计算的窗口,显示进度。但是弹出窗口里的任何控件都没了,只留下了一大堆白色的区域,我不知道为什么,怎么解决。代码如下:dialog1为预计弹出的窗口,本身窗体为form2,计算和画图在button1按钮中实现。
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim gr As Graphics = bg.CreateGraphics
Dim theta, r, xn, yn As Double
Dim brush As SolidBrush
Dim data(bg.Width, bg.Height) As Double
Dialog1.Show()

Dim mycolor As Color
Dim p, pp, qq As Double
Dim dmax = 0.0, dmin = 1.0, diff

gr.Clear(bg.BackColor)

mm = Val(min.Text)
ll = Val(lin.Text)
nn = Val(nin.Text)

For x = 1 To bg.Width
For y = 1 To bg.Height
st = x

xn = x - bg.Width / 2
yn = y - bg.Height / 2
theta = Math.Atan(xn / yn)
If xn <

弹出窗口里的任何控件都没了,只留下了一大堆白色的区域,是因为你的 Button1_Click 过程时间很长,在退出此过程前,系统没有机会进行绘图操作。

在以下两个循环体内的地方添加语句 DoEvents 能解决你的问题:

For x = 1 To bg.Width
For y = 1 To bg.Height
DoEvents '新添加的语句
st = x
..............

For x = 1 To bg.Width
For y = 1 To bg.Height
DoEvents '新添加的语句
brush = Brushes.Blue()
.....................

button1点击后运行循环过多,计算时占用太多资源,或者Dialog1弹出窗体本身加载东西多,等一段时间,等运行完了,或加载完毕,才能正常显示.
解决的办法是优化运算方法,或少加载控件.
再难一点方法就是用不同的线程同时工作.
(题外话:VS2008本身就很慢,一般的机子吃不消.我因不能忍受它的速度.而把它御载了,重新安装VS2005,觉得VS2005的速度还行.)

改成
dialog1.ShowDialog();
就可以达到你的目的了.
Show()方法不会挂起当前的Form,而是继续执行之后的语句,而且dialog1里面的语句也同时被执行.