以下代码不起作用:
Private Sub panelButton_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles panelButton.Click
Dim myBrush As Brush
myBrush = New SolidBrush(Color.Yellow)
fBitmap = New Bitmap(picturePanel.Width, picturePanel.Height)
Dim gg As Graphics = Graphics.FromImage(fBitmap)
gg.Clear(Color.White)
'<<<<<my attempt<<<<<<
Dim rec As Rectangle
rec = New Rectangle(picturePanel.Location.X, picturePanel.Location.Y, picturePanel.Width, picturePanel.Height)
gg.FillRectangle(myBrush, rec)
'<<<<<<<<<<<<<<<<<<<<<
'gg.FillRectangle(myBrush, gg.ClipBounds) '<<actual answer
gg.Dispose()
picturePanel.Refresh()
End Sub
在Panel的重绘处理程序中,我得到了这个:
Private Sub picturePanel_Paint(sender As System.Object, e As System.Windows.Forms.PaintEventArgs) Handles picturePanel.Paint
If fBitmap IsNot Nothing Then
e.Graphics.DrawImage(fBitmap, 0, 0)
End If
End Sub
我已经包含了推荐的代码(标记为actual answer
),但为什么标记为my attempt
的部分不会将面板变为黄色? - 可以调整它以使面板变黄吗?
答案 0 :(得分:4)
rec = New Rectangle(picturePanel.Location.X, picturePanel.Location.Y, _
picturePanel.Width, picturePanel.Height)
这是错误的矩形。它来自面板的Parent而不是面板本身。最多你会看到最右下角的矩形。或者根本不在位图上。相对于位图的左上角绘制。修正:
rec = New Rectangle(0, 0, fBitmap.Width, fBitmap.Height)
请注意,由于您完全忽略了白色,因此您将不再看到任何白色。目前尚不清楚你打算做什么。也许更具说明性的是给它一个黄色边框:
rec = New Rectangle(0, 0, fBitmap.Width-1, fBitmap.Height-1)
gg.DrawRectangle(Pens.Yellow, rec)
支持使用Using语句而不是显式的Dispose()调用。也可以在刷子上使用它,也应该处理它。