关于vb窗体加载的问题

我在窗体上画了一个picture1,想在窗体加载时就可以在picture1上画出直线,所以在窗体的load事件中写了以下代码:ConstSTART=14Picture1.... 我在窗体上画了一个picture1,想在窗体加载时就可以在picture1上画出直线,所以在窗体的load事件中写了以下代码:
Const START = 14
Picture1.Scale (0, 0)-(START, START)
For i = 0 To START
Picture1.Line (i, 0)-(i, START)
Next i
For j = 0 To START
Picture1.Line (0, j)-(START, j)
Next j
可是运行后picture1上什么也没有,但将上述代码写在窗体的click事件中(load事件不写),运行后,单击窗体,picture1可以画出直线。??????
展开
 我来答
牛A和牛C间徘徊
2011-05-10 · TA获得超过1037个赞
知道小有建树答主
回答量:782
采纳率:0%
帮助的人:605万
展开全部
画线之前加上一句...
Picture1.AutoRedraw = True

问题分析:
Form的Load事件是优先于Visible=True的,也就是说,在窗体显示出来之前,Form_Load事件已经被执行了..也就是线已经画好了,还没显示出来

但是默认状态下,Picture1画上去的东西是不会自动重绘的,这种情况也会出现在窗体被遮挡之后,被遮挡的部分也不会重新显示,只有AutoRedraw 设置为True的时候,才会自动重新绘制...否则需要手动刷新
tianqing20wen

2011-05-10 · TA获得超过2.4万个赞
知道大有可为答主
回答量:8226
采纳率:88%
帮助的人:5152万
展开全部
Private Sub Form_Load()
Picture1.AutoRedraw = True '加此句
Const START = 14
Picture1.Scale (0, 0)-(START, START)
For i = 0 To START
Picture1.Line (i, 0)-(i, START)
Next i
For j = 0 To START
Picture1.Line (0, j)-(START, j)
Next j
End Sub
主要原因不是楼上说的“Form_Load事件早于Picture1控件的加载”
Form_Initialize事件中已经加载了picture控件 而Load比initalize晚
picture上的图形显示不出来 主要是因为没有设置持续性输出 当窗体显示时 picture上的内容被重绘了
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
Jammy_zh
2011-05-10
知道答主
回答量:11
采纳率:0%
帮助的人:0
展开全部
将代码放入 Private Sub Form_Activate()中。
因为Form_Load事件早于Picture1控件的加载,所以Form_Load事件无法完成对后加载的Picture1画图。而Form_Activate事件是在Form上所有控件加载完成后才激活,所以能对控件Picture1上画图。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式