-
Jun 18th, 2021, 09:22 AM
#1
Thread Starter
Addicted Member
[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?
-
Jun 18th, 2021, 10:06 AM
#2
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.
-
Jun 21st, 2021, 06:58 AM
#3
Thread Starter
Addicted Member
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.
-
Jun 21st, 2021, 07:58 AM
#4
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
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
-
Forum Rules
|
Click Here to Expand Forum to Full Width
|