如何在btnGo_Click事件中触发.NET Label的Paint事件?
解决方案
要在btnGo_Click事件中触发Label1的Paint事件,直接调用控件的重绘方法即可,WinForms提供了两种常用实现方式:
方法1:调用Invalidate()
Invalidate()会标记Label1为需要重绘状态,系统会在合适时机自动触发Paint事件,适合无需立即重绘的场景:
Private Sub btnGo_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnGo.Click Label1.Invalidate() End Sub
方法2:调用Refresh()
Refresh()会立即强制控件完成重绘(等效于Invalidate() + Update()的组合操作),适合需要立刻看到重绘效果的场景:
Private Sub btnGo_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnGo.Click Label1.Refresh() End Sub
额外优化提示
你的原代码在每次Paint事件触发时都从磁盘读取图片,会产生频繁IO操作影响性能,还可能引发资源泄漏问题。建议提前加载图片并缓存,示例如下:
Private img As Image Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles MyBase.Load img = Image.FromFile("f:/myImage.bmp") End Sub Private Sub Label1_Paint(ByVal sender As Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles Label1.Paint Dim g As Graphics = e.Graphics g.DrawImage(img, New Point(0, 0)) End Sub ' 窗体关闭时释放图片资源 Private Sub Form1_FormClosed(ByVal sender As Object, ByVal e As System.Windows.Forms.FormClosedEventArgs) Handles Me.FormClosed img.Dispose() End Sub
内容的提问来源于stack exchange,提问作者LaLue
相关产品推荐
相关产品推荐

