O forse sono io che non capace di farla funzionare in maniera ottimale

Ho una picture box, sulla quale eseguo vari DrawRectangleS.
Lo sfondo è bianco dato dato da una bella

Dim gr As Graphics = PictureBox1.CreateGraphics
gr.Clear(Color.White)

Ho provato a remmare il clear, inserendo questa riga di testo:

PictureBox1.BackgroundImage = New Bitmap("indirizzo immagine")

e anche

PictureBox1.BackgroundImage = Image.FromFile("indirizzo immagine")


ma il risultato è sempre lo stesso: la form carica l'immagine di background, ci disegna sopra i Rettangoli, e poi è come se ci caricasse ancora la background image xk i rettangoli scompaiono graficamente (ma ci sono ancora, xk ho impostato un msgbox per ogni click all'interno dei rettangoli, e anche non vedendoli, se per caso ci clicco sopra la msgbox viene fuori, quindi fisicamente ci sono)

Vi posto il codice:

codice:
Imports System.Drawing
Imports System.Drawing.Drawing2D
Imports System.Drawing.Imaging
Imports System.Drawing.Text

Public Class gdivb
    Dim list As New List(Of c_ombrellone)
    Dim x As Integer
    Dim y As Integer
    Dim Zoom As Integer = 100
    Dim StepX As Integer = 5
    Dim StepY As Integer = 5

    Private Sub PictureBox1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles PictureBox1.Click
        For Each ombrellone As c_ombrellone In list
            ombrellone.zoom = ComboBox1.SelectedItem
            If (ombrellone.xBegin <= x) And (ombrellone.xEnd >= x) And (ombrellone.yBegin <= y) And (ombrellone.yEnd >= y) Then
                If (ombrellone.xBegin <= x) And (x <= ombrellone.xBegin + ombrellone.w / 3) And (y >= ombrellone.yBegin + ombrellone.h / 2) And (ombrellone.yEnd >= y) Then
                    MsgBox(ombrellone.Testo + " quadrato di sinistra.")
                    Exit For
                ElseIf (ombrellone.xBegin + ombrellone.w / 3 * 2 <= x) And (x <= ombrellone.xEnd) And (y >= ombrellone.yBegin + ombrellone.h / 2) And (ombrellone.yEnd >= y) Then
                    MsgBox(ombrellone.Testo + " quadrato di destra")
                    Exit For
                Else
                    MsgBox(ombrellone.Testo)
                    Exit For
                End If
            End If
        Next
    End Sub
    Private Sub PictureBox1_MouseUp(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles PictureBox1.MouseDown
        x = e.X
        y = e.Y
    End Sub

    Private Sub gdivb_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        ComboBox1.Items.Add("100")
        ComboBox1.Items.Add("120")
        ComboBox1.Items.Add("150")
        ComboBox1.Items.Add("180")
        ComboBox1.Items.Add("200")
        ComboBox1.SelectedItem = "100"
    End Sub
    Private Sub ComboBox1_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ComboBox1.SelectedIndexChanged, Button1.Click
        Zoom = CInt(ComboBox1.SelectedItem)
        PictureBox1.BackgroundImage = New Bitmap("C:\Users\Luca\Documents\Visual Studio 2010\Projects\Ombrelloni\Ombrelloni\Chrysanthemum.jpg")
        Dim gr As Graphics = PictureBox1.CreateGraphics
        'gr.Clear(Color.White)
        Dim w As Integer = 50
        Dim h As Integer = 30
        Dim f As New Font("Verdana", 8, FontStyle.Bold)
        For i As Integer = 1 To 10
            For j As Integer = 1 To 33
                Dim o As New c_ombrellone("Ombrellone " + i.ToString + " - " + j.ToString, (j - 1) * (w + StepX), (i - 1) * (h + StepY), w, h, Color.Red, "Verdana", 8, FontStyle.Bold)
                o.zoom = Zoom
                list.Add(o)
                o.ScriviQuadrato(gr, Brushes.Black)
            Next
        Next
    End Sub
La combobox la uso per zoommare (ma per il problema che vi pongo non è importante, ve lo dico per completezza), e vi faccio notare che il disegno viene creato su pressione del bottone Button1


Vi posto inoltre la classe c_ombrellone:
codice:
Public Class c_ombrellone
    Property IDPrenotazione As Integer
    Property Testo As String
    Property zoom As Integer = 100
    Dim mxBegin As Integer
    ReadOnly Property xBegin As Integer
        Get
            Return CInt(mxBegin * zoom / 100)
        End Get
    End Property
    Dim mybegin As Integer
    ReadOnly Property yBegin As Integer
        Get
            Return CInt(mybegin * zoom / 100)
        End Get
    End Property
    Dim mxend As Integer
    ReadOnly Property xEnd As Integer
        Get
            Return CInt(mxend * zoom / 100)
        End Get
    End Property
    Dim myEnd As Integer
    ReadOnly Property yEnd As Integer
        Get
            Return CInt(myEnd * zoom / 100)
        End Get
    End Property
    ReadOnly Property w As Integer
        Get
            Return xEnd - xBegin
        End Get
    End Property
    ReadOnly Property h As Integer
        Get
            Return yEnd - yBegin
        End Get
    End Property
    Property BackColor As Color
    Property Font As Font

    Sub New()

    End Sub

    Sub New(ByVal n As String, ByVal x As Integer, ByVal y As Integer, ByVal w As Integer, ByVal h As Integer, ByVal backColor As Color, ByVal fontFamily As String, ByVal fontSizeEm As Integer, ByVal fontStile As FontStyle)
        Testo = n
        mxBegin = x
        mybegin = y
        mxend = x + w
        myEnd = y + h
        Me.BackColor = BackColor
        Font = New Font(fontFamily, fontSizeEm, fontStile)
    End Sub

    Sub ScriviQuadrato(ByRef gr As Graphics, ByVal Brush As System.Drawing.Brush)
        Dim r As New RectangleF(xBegin, yBegin, w, h)
        Dim l As New RectangleF(xBegin, yBegin + h / 2, w / 3, h / 2)
        Dim s As New RectangleF(xBegin + w / 3 * 2, yBegin + h / 2, w / 3, h / 2)
        gr.DrawRectangles(Pens.Blue, New RectangleF() {r})
        gr.DrawRectangles(Pens.Black, New RectangleF() {l})
        gr.DrawRectangles(Pens.Black, New RectangleF() {s})
        Dim sa = System.Drawing.StringFormat.GenericDefault
        sa.Alignment = StringAlignment.Center
        sa.LineAlignment = StringAlignment.Near
        gr.DrawString(Testo, Font, Brush, r, sa)
    End Sub
End Class