Results 1 to 4 of 4

Thread: [RESOLVED] Custom user control with custom proprety and event

  1. #1

    Thread Starter
    Addicted Member
    Join Date
    Jun 2015
    Posts
    171

    Resolved [RESOLVED] Custom user control with custom proprety and event

    Hello, I'm trying to build a control: it have 6 mybuttons(they are buttons from a custom theme with a proprety called pressed that change the color of the button when=true).
    I want to use it to get the endianess selected like in the following code
    Code:
    Public Class mybtnBit
        Private Sub mybtnHILO_Click(sender As Object, e As EventArgs) Handles mybtnHILO.Click
            If mybtnFloat.Pressed = False Then mybtnHILO.Pressed = Not mybtnHILO.Pressed
            endianess = GetEndianess()
        End Sub
        Private Sub mybtnSigned_Click(sender As Object, e As EventArgs) Handles mybtnSigned.Click
            If mybtnFloat.Pressed = True Then mybtnSigned.Pressed = Not mybtnSigned.Pressed
            endianess = GetEndianess()
        End Sub
        Private Sub mybtn8Bit_Click(sender As Object, e As EventArgs) Handles mybtn8Bit.Click
            mybtn8Bit.Pressed = True
            mybtn16Bit.Pressed = False
            mybtn32Bit.Pressed = False
            mybtnFloat.Pressed = False
            mybtnHILO.Pressed = False
            endianess = GetEndianess()
        End Sub
    
        Private Sub mybtn16Bit_Click(sender As Object, e As EventArgs) Handles mybtn16Bit.Click
            mybtn16Bit.Pressed = True
            mybtn8Bit.Pressed = False
            mybtn32Bit.Pressed = False
            mybtnFloat.Pressed = False
            endianess = GetEndianess()
        End Sub
        Private Sub mybtn32Bit_Click(sender As Object, e As EventArgs) Handles mybtn32Bit.Click
            mybtn32Bit.Pressed = True
            mybtn16Bit.Pressed = False
            mybtn8Bit.Pressed = False
            mybtnFloat.Pressed = False
            SelectedEndianess = 0
            endianess = GetEndianess()
        End Sub
        Private Sub mybtnFloat_Click(sender As Object, e As EventArgs) Handles mybtnFloat.Click
            mybtnFloat.Pressed = True
            mybtn16Bit.Pressed = False
            mybtn32Bit.Pressed = False
            mybtn8Bit.Pressed = False
            mybtnHILO.Pressed = False
            mybtnSigned.Pressed = False
            endianess = GetEndianess()
        End Sub
        Private endianess As UInt16 = 0
        Property SelectedEndianess As UInt16
            Set(value As UInt16)
                endianess = GetEndianess()
            End Set
    
            Get
                endianess = GetEndianess()
                Return endianess
            End Get
        End Property
    
        '0 8 bit Signed
        '1 8 Bit Unsigned
        '2 16 bit Signed Little Endian
        '3 16 bit Unsigned Little Endian
        '4 16 bit Signed Big Endian
        '5 16 bit Unsigned Big Endian
        '6 32 bit Signed Little Endian
        '7 32 bit Unsigned Little Endian
        '8 32 bit Signed Big Endian
        '9 32 bit Unsigned Big Endian
        '10 Float (not used)
        Private Function GetEndianess()
            Dim EndianessState As UInt16
            If mybtnSigned.Pressed = True Then
                'Signed
                If mybtn8Bit.Pressed = True Then
                    '8Bit Signed
                    EndianessState = 0
                ElseIf mybtn16Bit.Pressed = True Then
                    '16bit Signed
                    If mybtnHILO.Pressed = True Then
                        '16bit Signed Big Endian
                        EndianessState = 4
                    Else
                        '16bit Signed Little Endian
                        EndianessState = 2
                    End If
                ElseIf mybtn32Bit.Pressed = True Then
                    '32bit Signed
                    If mybtnHILO.Pressed = True Then
                        '32bit Signed Big Endian
                        EndianessState = 8
                    Else
                        '32bit Signed Little Endian
                        EndianessState = 6
                    End If
    
                End If
            Else
                'Unsigned
                If mybtn8Bit.Pressed = True Then
                    '8Bit Unsigned
                    EndianessState = 1
                ElseIf mybtn16Bit.Pressed = True Then
                    '16bit unsigned
                    If mybtnHILO.Pressed = True Then
                        '16bit Unsigned Big Endian
                        EndianessState = 5
                    Else
                        '16bit Unsigned Little Endian
                        EndianessState = 3
                    End If
                ElseIf mybtn32Bit.Pressed = True Then
                    '32bit unsigned
                    If mybtnHILO.Pressed = True Then
                        '32bit Unsigned Big Endian
                        EndianessState = 9
                    Else
                        '32bit Unsigned Little Endian
                        EndianessState = 7
                    End If
                ElseIf mybtnFloat.Pressed = True Then
                    'float
                    EndianessState = 10
    
                End If
            End If
            Return EndianessState
        End Function
    
    End Class
    My goal is to have an event when the user click on one of this buttons, and also change the proprety SelectedEndianess.
    Can you help me please?

  2. #2
    Super Moderator jmcilhinney's Avatar
    Join Date
    May 2005
    Location
    Sydney, Australia
    Posts
    110,297

    Re: Custom user control with custom proprety and event

    I suggest that you follow the Blog link in my signature below and check out my post on custom events.

  3. #3

    Thread Starter
    Addicted Member
    Join Date
    Jun 2015
    Posts
    171

    Re: Custom user control with custom proprety and event

    Thanks, I'm studying event on your blog.
    I've tryed, but I'm still missing something.(sorry for my bad english)
    Code:
    Public Class mybtnBit
        Enum EnEndianessState
            e8bitSigned
            e8BitUnsigned
            e16bitSignedLittleEndian
            e16bitUnsignedLittleEndian
            e16bitSignedBigEndian
            e16bitUnsignedBigEndian
            e32bitSignedLittleEndian
            e32bitUnsignedLittleEndian
            e32bitSignedBigEndian
            e32bitUnsignedBigEndian
            eFloat
        End Enum
    
    
        Private Function GetEndianess()
            Dim EndianessState As String
            If mybtnSigned.Pressed = True Then
                'Signed
                If mybtn8Bit.Pressed = True Then
                    '8Bit Signed
                    EndianessState = EnEndianessState.e8bitSigned
                ElseIf mybtn16Bit.Pressed = True Then
                    '16bit Signed
                    If mybtnHILO.Pressed = True Then
                        '16bit Signed Big Endian
                        EndianessState = EnEndianessState.e16bitSignedBigEndian
                    Else
                        '16bit Signed Little Endian
                        EndianessState = EnEndianessState.e16bitSignedLittleEndian
                    End If
                ElseIf mybtn32Bit.Pressed = True Then
                    '32bit Signed
                    If mybtnHILO.Pressed = True Then
                        '32bit Signed Big Endian
                        EndianessState = EnEndianessState.e32bitSignedBigEndian
                    Else
                        '32bit Signed Little Endian
                        EndianessState = EnEndianessState.e32bitSignedLittleEndian
                    End If
    
                End If
            Else
                'Unsigned
                If mybtn8Bit.Pressed = True Then
                    '8Bit Unsigned
                    EndianessState = EnEndianessState.e8BitUnsigned
                ElseIf mybtn16Bit.Pressed = True Then
                    '16bit unsigned
                    If mybtnHILO.Pressed = True Then
                        '16bit Unsigned Big Endian
                        EndianessState = EnEndianessState.e16bitUnsignedBigEndian
                    Else
                        '16bit Unsigned Little Endian
                        EndianessState = EnEndianessState.e16bitUnsignedLittleEndian
                    End If
                ElseIf mybtn32Bit.Pressed = True Then
                    '32bit unsigned
                    If mybtnHILO.Pressed = True Then
                        '32bit Unsigned Big Endian
                        EndianessState = EnEndianessState.e32bitUnsignedBigEndian
                    Else
                        '32bit Unsigned Little Endian
                        EndianessState = EnEndianessState.e32bitUnsignedLittleEndian
                    End If
                ElseIf mybtnFloat.Pressed = True Then
                    'float
                    EndianessState = EnEndianessState.eFloat
    
                End If
            End If
            Return EndianessState
        End Function
    
        Private Sub mybtnHILO_Click(sender As Object, e As EventArgs) Handles mybtnHILO.Click
            If mybtnFloat.Pressed = False Then mybtnHILO.Pressed = Not mybtnHILO.Pressed
            If mybtnHILO.Pressed = True Then
                mybtnHILO.Text = "HILO"
    
            Else
            mybtnHILO.Text = "LOHI"
            End If
            endianess = GetEndianess()
        End Sub
        Private Sub mybtnSigned_Click(sender As Object, e As EventArgs) Handles mybtnSigned.Click
            If mybtnFloat.Pressed = False Then mybtnSigned.Pressed = Not mybtnSigned.Pressed
            endianess = GetEndianess()
        End Sub
        Private Sub mybtn8Bit_Click(sender As Object, e As EventArgs) Handles mybtn8Bit.Click
            mybtn8Bit.Pressed = True
            mybtn16Bit.Pressed = False
            mybtn32Bit.Pressed = False
            mybtnFloat.Pressed = False
            mybtnHILO.Pressed = False
            endianess = GetEndianess()
        End Sub
    
        Private Sub mybtn16Bit_Click(sender As Object, e As EventArgs) Handles mybtn16Bit.Click
            mybtn16Bit.Pressed = True
            mybtn8Bit.Pressed = False
            mybtn32Bit.Pressed = False
            mybtnFloat.Pressed = False
            ' 
        End Sub
        Private Sub mybtn32Bit_Click(sender As Object, e As EventArgs) Handles mybtn32Bit.Click
            mybtn32Bit.Pressed = True
            mybtn16Bit.Pressed = False
            mybtn8Bit.Pressed = False
            mybtnFloat.Pressed = False
    
            endianess = GetEndianess()
        End Sub
        Private Sub mybtnFloat_Click(sender As Object, e As EventArgs) Handles mybtnFloat.Click
            mybtnFloat.Pressed = True
            mybtn16Bit.Pressed = False
            mybtn32Bit.Pressed = False
            mybtn8Bit.Pressed = False
            mybtnHILO.Pressed = False
            mybtnSigned.Pressed = False
            endianess = GetEndianess()
        End Sub
        Private endianess As String
        Property SelectedEndianess As String
            Set(ByVal value As String)
    
                If value <> Me.endianess Then
    
                    Me.endianess = value
    
                    Me.OnEndianessChanged(EventArgs.Empty)
    
                End If
    
            End Set
    
            Get
                endianess = GetEndianess()
                Return endianess
            End Get
        End Property
    
    
    
        Public Event EndianessChanged As EventHandler
    
        Protected Overridable Sub OnEndianessChanged(ByVal e As EventArgs)
    
            RaiseEvent EndianessChanged(Me, e)
    
        End Sub
    
        Private Sub mybtnBit_Load(sender As Object, e As EventArgs) Handles MyBase.Load
            'default State at 8 bit unsigned
            SelectedEndianess = EnEndianessState.e8BitUnsigned
            mybtn8Bit.Pressed = True
            If mybtnHILO.Pressed = True Then
                mybtnHILO.Text = "HILO"
    
            Else
                mybtnHILO.Text = "LOHI"
            End If
            endianess = GetEndianess()
        End Sub
    End Class
    I don't understand way the event not fired.

  4. #4
    Smooth Moperator techgnome's Avatar
    Join Date
    May 2002
    Posts
    34,531

    Re: Custom user control with custom proprety and event

    You raise the event in the set of the SelectedEndianess property ... but you never use the setter... you set the backing variable instead.
    What you should be doing is something like this:
    Code:
        Private endianess As String
        private sub SetEndianess(byVal value as String)
                If value <> Me.endianess Then
                    Me.endianess = value
                    Me.OnEndianessChanged(EventArgs.Empty)
                End If
        end sub
    
        Property SelectedEndianess As String
            Set(ByVal value As String)
    
                setEndianess(value)
    
            End Set
    
            Get
                endianess = GetEndianess()
                Return endianess
            End Get
        End Property
    
    ''' Then replace all of these lines:
    endianess = GetEndianess()
    with
    setEndianess(GetEndianess())
    -tg
    * I don't respond to private (PM) requests for help. It's not conducive to the general learning of others.*
    * I also don't respond to friend requests. Save a few bits and don't bother. I'll just end up rejecting anyways.*
    * How to get EFFECTIVE help: The Hitchhiker's Guide to Getting Help at VBF - Removing eels from your hovercraft *
    * How to Use Parameters * Create Disconnected ADO Recordset Clones * Set your VB6 ActiveX Compatibility * Get rid of those pesky VB Line Numbers * I swear I saved my data, where'd it run off to??? *

Tags for this Thread

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •  



Click Here to Expand Forum to Full Width