0

以下代码不起作用:

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

在面板的重绘处理程序中,我得到了这个:

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将面板变为黄色?- 可以对其进行调整以使面板变黄吗?

4

1 回答 1

4
rec = New Rectangle(picturePanel.Location.X, picturePanel.Location.Y, _
                    picturePanel.Width, picturePanel.Height)

那是错误的矩形。它与面板的父级相关,而不是面板本身。充其量你会在最右下角看到矩形。或者如果它不在位图上,则根本没有。而是相对于位图的左上角进行绘制。使固定:

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() 调用。也可以在刷子上使用它,它也应该被丢弃。

于 2013-03-10T11:52:08.223 回答