vb.netcustom-controlspictureboxcaptions

Picturebox with Caption in VB.NET


How can I have a picturebox (control) with a caption? I already can add Text over this picturebox, but I want it under the picturebox. But if the location of the text is beyond Picturebox's size, it won't be visible. It would be great if the text had a border & background color too.

Please help.

Here's the code:

Public Class neoPic
   Inherits PictureBox
   Protected Overrides Sub OnPaint(ByVal e As PaintEventArgs)
       MyBase.OnPaint(e)
       e.Graphics.DrawString("Caption ", New Font("Cambria", 10), Brushes.Black, New PointF(0, 60))
   End Sub
End Class

Solution

  • I ended up creating a UserControl. I put the working code here in case it saves another developer's time. I added a UserControl to my project (named PicTitled) and added a Picturebox (named PTPicturebox) and a Label (named PTLabel) stacked on each other. Then I added Text & Image property for the PicTitled and an event handler for mouse click.

    Public Class PicTitled
        Public Shadows Event MouseClick As MouseEventHandler
    
    
        Overrides Property Text As String
            Get
                Return PTLabel.Text
            End Get
            Set(ByVal Value As String)
                PTLabel.Text = Value
            End Set
        End Property
    
        Property Image As Image
            Get
                Return PTPicturebox.Image
            End Get
            Set(ByVal Value As Image)
                PTPicturebox.Image = Value
            End Set
        End Property
    
        Private Sub PicTitled_MouseClick(sender As Object, e As MouseEventArgs) Handles MyBase.MouseClick, PTPicturebox.MouseClick, PTLabel.MouseClick
            RaiseEvent MouseClick(Me, e)
        End Sub
    
    
    End Class
    

    And in the main form, I added a code like:

        Private Sub CreateObj()
            Dim pbPicture As New PicTitled
            pbPicture.Name = "Object"
            pbPicture.Location = New System.Drawing.Point(40, 40)
            pbPicture.Text = "Object"
            pbPicture.Image = My.Resources.IMG
            pbPicture.Size = New System.Drawing.Size(50, 50)
            AddHandler pbPicture.MouseClick, AddressOf PictureBox_MouseClick
    
            Panel1.Controls.Add(pbPicture)
        End Sub
    
        Private Sub PictureBox_MouseClick(sender As Object, e As MouseEventArgs)
            'Do stuff when mouse click happens...
        End Sub