0

I am attempting to build a Custom GUI form. I am using pictureBoxes to hold the close/minimize/maximize button. I have added the .png resources to the form's .resx file and set the resources to be embeded.

In the form's code behind file I have the following:

Private Property resources As System.ComponentModel.ComponentResourceManager = New System.ComponentModel.ComponentResourceManager(GetType(woot))

and here is the code that is supposed to replace the image in one of the pictureBoxes

Private Sub closeBtn_MouseEnter(sender As Object, e As EventArgs) Handles closeBtn.MouseEnter
    Me.closeBtn.Image = CType(Me.resources.GetObject("closeBtn_Over.Image"), System.Drawing.Image)
End Sub

Basically, when the mouse moves over the window, the .image property gets set to nothing. the click events and such still work fine.

So my question is, how in the world do I access the images that I embedded in the form's resource file? I can embed them in the project's .resx file just fine, but my goal is to create a self contained form that can be exported as a standalone template.


EDIT

So, new symptom. Forget everything above. whenever I change a property on the main form in the designer, the images that I added to the form's .resx file are getting removed. Hence why the images are getting set to nothing. Since this appears to be related to changes made in the designer, I'm using Visual Studio 2012 Ultimate. Also since it may be relevant here is the entire code behind file for the form.

Public Class woot
#Region "FORM PROPERTY DECLARATIONS"
    Private Property resources As System.ComponentModel.ComponentResourceManager = New System.ComponentModel.ComponentResourceManager(GetType(woot))
    Private Property _HelpButton As Boolean
    Public Overloads Property HelpButton As Boolean
        Get
            Return _HelpButton
        End Get
        Set(value As Boolean)
            Me._HelpButton = value
            setGUIButtonVisability(Me.helpBtn, value)
        End Set
    End Property
    Private Property _MinimizeBox As Boolean
    Public Overloads Property MinimizeBox As Boolean
        Get
            Return _MinimizeBox
        End Get
        Set(value As Boolean)
            Me._MinimizeBox = value
            setGUIButtonVisability(Me.minBtn, value)
        End Set
    End Property
    Private Property _MaximizeBox As Boolean
    Public Overloads Property MaximizeBox As Boolean
        Get
            Return _MaximizeBox
        End Get
        Set(value As Boolean)
            Me._MaximizeBox = value
            setGUIButtonVisability(Me.maxBtn, value)
        End Set
    End Property
    Private Property _Text As String
    Public Overloads Property Text As String
        Get
            Return _Text
        End Get
        Set(value As String)
            Me._Text = value
            Me.TitleLabel.Text = value
        End Set
    End Property
    Private Property _CloseButton As Boolean = True
    Public Property CloseButton As Boolean
        Get
            Return _CloseButton
        End Get
        Set(value As Boolean)
            Me._CloseButton = value
            setGUIButtonVisability(Me.closeBtn, value)
        End Set
    End Property
#End Region
#Region "GUI STUFF"
    Private Const WM_NCLBUTTONDOWN As Integer = &HA1S
    Private Const WM_NCHITTEST = &H84S
    Private Const WM_NCCALCSIZE = &H83S
    Private Const HTBORDER As Integer = 18
    Private Const HTBOTTOM As Integer = 15
    Private Const HTBOTTOMLEFT As Integer = 16
    Private Const HTBOTTOMRIGHT As Integer = 17
    Private Const HTCAPTION As Integer = 2
    Private Const HTLEFT As Integer = 10
    Private Const HTRIGHT As Integer = 11
    Private Const HTTOP As Integer = 12
    Private Const HTTOPLEFT As Integer = 13
    Private Const HTTOPRIGHT As Integer = 14

    Private Sub closeBtn_Click(sender As Object, e As EventArgs) Handles closeBtn.Click, iconBox.DoubleClick
        Me.Dispose()
    End Sub
    Private Sub closeBtn_MouseDown(sender As Object, e As MouseEventArgs) Handles closeBtn.MouseDown
        Me.closeBtn.Image = CType(Me.resources.GetObject("closeBtn_Down"), System.Drawing.Image)
    End Sub
    Private Sub closeBtn_MouseEnter(sender As Object, e As EventArgs) Handles closeBtn.MouseEnter
        Me.closeBtn.Image = CType(Me.resources.GetObject("closeBtn_Over"), System.Drawing.Image)
    End Sub
    Private Sub closeBtn_MouseLeave(sender As Object, e As EventArgs) Handles closeBtn.MouseLeave
        Me.closeBtn.Image = CType(Me.resources.GetObject("closeBtn_Normal"), System.Drawing.Image)
        Me.closeBtn.Refresh()
    End Sub
    Private Sub closeBtn_MouseUp(sender As Object, e As MouseEventArgs) Handles closeBtn.MouseUp
        Me.closeBtn.Image = CType(Me.resources.GetObject("closeBtn_Normal"), System.Drawing.Image)
    End Sub

    Private Sub maxBtn_Click(sender As Object, e As EventArgs) Handles maxBtn.Click
        If Me.WindowState = FormWindowState.Normal Then
            Dim thisScreen As Screen = Screen.FromPoint(Me.Location)
            Me.MaximumSize = thisScreen.WorkingArea.Size
            Me.WindowState = FormWindowState.Maximized
        Else
            Me.WindowState = FormWindowState.Normal
        End If
    End Sub
    Private Sub maxBtn_MouseDown(sender As Object, e As MouseEventArgs) Handles maxBtn.MouseDown
        If Me.WindowState = FormWindowState.Normal Then
            maxBtn.Image = CType(resources.GetObject("maxBtn_Down"), System.Drawing.Image)
        Else
            maxBtn.Image = CType(resources.GetObject("maxBtn_Down_2"), System.Drawing.Image)
        End If
    End Sub
    Private Sub maxBtn_MouseEnter(sender As Object, e As EventArgs) Handles maxBtn.MouseEnter
        If Me.WindowState = FormWindowState.Normal Then
            maxBtn.Image = CType(resources.GetObject("maxBtn_Over"), System.Drawing.Image)
        Else
            maxBtn.Image = CType(resources.GetObject("maxBtn_Over_2"), System.Drawing.Image)
        End If
    End Sub
    Private Sub maxBtn_MouseLeave(sender As Object, e As EventArgs) Handles maxBtn.MouseLeave
        If Me.WindowState = FormWindowState.Normal Then
            maxBtn.Image = CType(resources.GetObject("maxBtn_Normal"), System.Drawing.Image)
        Else
            maxBtn.Image = CType(resources.GetObject("maxBtn_Normal_2"), System.Drawing.Image)
        End If
    End Sub
    Private Sub maxBtn_MouseUp(sender As Object, e As MouseEventArgs) Handles maxBtn.MouseUp
        If Me.WindowState = FormWindowState.Normal Then
            maxBtn.Image = CType(resources.GetObject("maxBtn_Normal"), System.Drawing.Image)
        Else
            maxBtn.Image = CType(resources.GetObject("maxBtn_Normal_2"), System.Drawing.Image)
        End If
    End Sub

    Private Sub minBtn_Click(sender As Object, e As EventArgs) Handles minBtn.Click
        Me.WindowState = FormWindowState.Minimized
    End Sub
    Private Sub minBtn_MouseDown(sender As Object, e As MouseEventArgs) Handles minBtn.MouseDown
        minBtn.Image = CType(resources.GetObject("minBtn_Down"), System.Drawing.Image)
    End Sub
    Private Sub minBtn_MouseEnter(sender As Object, e As EventArgs) Handles minBtn.MouseEnter
        minBtn.Image = CType(resources.GetObject("minBtn_Over"), System.Drawing.Image)
    End Sub
    Private Sub minBtn_MouseLeave(sender As Object, e As EventArgs) Handles minBtn.MouseLeave
        minBtn.Image = CType(resources.GetObject("minBtn_Normal"), System.Drawing.Image)
    End Sub
    Private Sub minBtn_MouseUp(sender As Object, e As MouseEventArgs) Handles minBtn.MouseUp
        minBtn.Image = CType(resources.GetObject("minBtn_Normal"), System.Drawing.Image)
    End Sub

    Private Sub helpBtn_MouseDown(sender As Object, e As MouseEventArgs) Handles helpBtn.MouseDown
        helpBtn.Image = CType(resources.GetObject("helpBtn_Down"), System.Drawing.Image)
    End Sub
    Private Sub helpBtn_MouseEnter(sender As Object, e As EventArgs) Handles helpBtn.MouseEnter
        helpBtn.Image = CType(resources.GetObject("helpBtn_Over"), System.Drawing.Image)
    End Sub
    Private Sub helpBtn_MouseLeave(sender As Object, e As EventArgs) Handles helpBtn.MouseLeave
        helpBtn.Image = CType(resources.GetObject("helpBtn_Normal"), System.Drawing.Image)
    End Sub
    Private Sub helpBtn_MouseUp(sender As Object, e As MouseEventArgs) Handles helpBtn.MouseUp
        helpBtn.Image = CType(resources.GetObject("helpBtn_Normal"), System.Drawing.Image)
    End Sub

    Private Sub TitleBar_MouseDown(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles TitleLabel.MouseDown
        If e.Clicks = 2 Then
            If Me.WindowState = FormWindowState.Normal Then
                Dim thisScreen As Screen = Screen.FromPoint(Me.Location)
                Me.MaximumSize = thisScreen.WorkingArea.Size
                Me.WindowState = FormWindowState.Maximized
            Else
                Me.WindowState = FormWindowState.Normal
            End If
        ElseIf e.Button = MouseButtons.Left And e.Clicks = 1 Then
            sender.Capture = False
            ' Create and send a WM_NCLBUTTONDOWN message.
            Dim msg As Message = _
                Message.Create(Me.Handle, WM_NCLBUTTONDOWN, _
                    New IntPtr(HTCAPTION), IntPtr.Zero)
            Me.DefWndProc(msg)
        End If

    End Sub
    Private Sub BPanel_MouseDown(sender As Object, e As MouseEventArgs) Handles BPanel.MouseDown
        If e.Button = MouseButtons.Left Then
            Me.BPanel.Capture = False

            ' Create and send a WM_NCLBUTTONDOWN message.
            Dim msg As Message = _
                Message.Create(Me.Handle, WM_NCLBUTTONDOWN, _
                    New IntPtr(HTBOTTOM), IntPtr.Zero)
            Me.DefWndProc(msg)
        End If
    End Sub
    Private Sub BRPanel_MouseDown(sender As Object, e As MouseEventArgs) Handles BRPanel.MouseDown
        If e.Button = MouseButtons.Left Then
            Me.BRPanel.Capture = False

            ' Create and send a WM_NCLBUTTONDOWN message.
            Dim msg As Message = _
                Message.Create(Me.Handle, WM_NCLBUTTONDOWN, _
                    New IntPtr(HTBOTTOMRIGHT), IntPtr.Zero)
            Me.DefWndProc(msg)
        End If
    End Sub
    Private Sub BLPanel_MouseDown(sender As Object, e As MouseEventArgs) Handles BLPanel.MouseDown
        If e.Button = MouseButtons.Left Then
            Me.BLPanel.Capture = False

            ' Create and send a WM_NCLBUTTONDOWN message.
            Dim msg As Message = _
                Message.Create(Me.Handle, WM_NCLBUTTONDOWN, _
                    New IntPtr(HTBOTTOMLEFT), IntPtr.Zero)
            Me.DefWndProc(msg)
        End If
    End Sub
    Private Sub RPanel_MouseDown(sender As Object, e As MouseEventArgs) Handles RPanel.MouseDown
        If e.Button = MouseButtons.Left Then
            Me.RPanel.Capture = False

            ' Create and send a WM_NCLBUTTONDOWN message.
            Dim msg As Message = _
                Message.Create(Me.Handle, WM_NCLBUTTONDOWN, _
                    New IntPtr(HTRIGHT), IntPtr.Zero)
            Me.DefWndProc(msg)
        End If
    End Sub
    Private Sub LPanel_MouseDown(sender As Object, e As MouseEventArgs) Handles LPanel.MouseDown
        If e.Button = MouseButtons.Left Then
            Me.LPanel.Capture = False

            ' Create and send a WM_NCLBUTTONDOWN message.
            Dim msg As Message = _
                Message.Create(Me.Handle, WM_NCLBUTTONDOWN, _
                    New IntPtr(HTLEFT), IntPtr.Zero)
            Me.DefWndProc(msg)
        End If
    End Sub

    Private Sub setGUIButtonVisability(ByVal button As PictureBox, ByVal value As Boolean)
        button.Visible = value
    End Sub
#End Region
#Region "GUI SUPPORT FUNCTIONS"
    Private Sub helpBtn_Click(sender As Object, e As EventArgs) Handles helpBtn.Click
        Try
            Throw New NotImplementedException
        Catch ex As Exception
            MsgBox(String.Format("The control {0} has not been implmented yet." & vbCrLf & vbCrLf & "{1}", sender.Name, ex.Message))
        End Try
    End Sub
#End Region


    Private Sub CustomGUIForm1_Load(sender As Object, e As EventArgs) Handles Me.Load

    End Sub

End Class
  • http://stackoverflow.com/questions/8767755/how-do-you-load-an-image-from-resource-file-in-vb-2010-expresss – Lin May 28 '14 at 03:02

1 Answers1

1

Assuming you're at the project level, use My instead of Me. You'll also want to add a MouseLeave event. Something like this:

Private Sub closeBtn_MouseEnter(sender As Object, e As EventArgs) Handles closeBtn.MouseEnter
    closeBtn.Image = My.Resources.MyCloseImageName
End Sub

And the MouseLeave event:

Private Sub closeBtn_MouseLeave(sender As Object, e As EventArgs) Handles closeBtn.MouseLeave
    closeBtn.Image = My.Resources.MyNormalImageName
End Sub

When you type out "My.Resources.", that second dot will enable intellisense and you'll see whatever images are in your resources file. There's no need for the ComponentResourceManager reference unless you're trying to do something I'm not seeing.

Kevin R.
  • 11
  • 4