2013-03-09 56 views
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
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) 

不喜歡使用語句而不是顯式的Dispose()調用。在刷子上使用它,它也應該被處置。