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)

明示的なDispose()呼び出しではなく、Usingステートメントを優先してください。ブラシにも使用してください。廃棄する必要があります。

于 2013-03-10T11:52:08.223 に答える