Пользовательский элемент управления VB не может рисовать за пределами заданного пространства, не может рисовать

#vb.net

#vb.net

Вопрос:

Пользовательский элемент управления не может рисовать за пределами заданного пространства.

Вверху слева есть небольшое поле, в котором можно рисовать, но оно никогда не меняет положения или размера. Это означает, что если я установлю местоположение или размер в значения за пределами этого поля, изображение будет обрезано.

Элемент управления:

 Public Class mySprite
    Inherits UserControl

    Dim _location As System.Drawing.Point
    Dim _size As System.Drawing.Size

    Dim image as System.Drawing.Image

    Public Sub New()
        _location = New System.Drawing.Point(0, 0)
        _size = New System.Drawing.Size(1, 1)

        image = System.Drawing.Image.FromFile("sprite.png")

        Invalidate()
    End Sub

    Overloads Property Location As System.Drawing.Point
        Get
            Return Location
        End Get
        Set(ByVal value As System.Drawing.Point)
            _location = value
            Invalidate()
        End Set
    End Property

    Overloads Property Size As System.Drawing.Size
        Get
            Return _size
        End Get
        Set(ByVal value As System.Drawing.Size)
            _size = value
            ImageBase = ScaleImage(_ImageBase, _size.Width, _size.Height)
            Invalidate()
        End Set
    End Property

    Protected Overrides Sub OnPaintBackground(ByVal e As System.Windows.Forms.PaintEventArgs)
        'MyBase.OnPaintBackground(e)
    End Sub

    Protected Overrides Sub OnPaint(ByVal e As System.Windows.Forms.PaintEventArgs)
        Dim g As System.Drawing.Graphics = e.Graphics

        g.Clear(Color.Transparent)

        If Visible Then
            g.DrawImage(image, 0, 0)
        End If
    End Sub
End Class
  

Использование:

 Dim pic As New transPicBox
pic.Location = new System.Drawing.Point(100, 100)
pic.Size = New System.Drawing.Size(100, 100)
pic.Visible = True
Me.Controls.Add(pic)
  

Если кто-нибудь может улучшить заголовок, сообщение или ответ, пожалуйста, сделайте это.

Ответ №1:

При настройке местоположения или размера вызывайте MyBase.Location = value и MyBase.Size = value соответственно. Например.

     Overloads Property Size As System.Drawing.Size
        Get
            Return _size
        End Get
        Set(ByVal value As System.Drawing.Size)
            _size = value
            MyBase.Size = value
            ImageBase = ScaleImage(_ImageBase, _size.Width, _size.Height)
            Invalidate()
        End Set
    End Property