Imports System.Reflection
Public Class ItemBox
Private _Color As Color
Private _Text As String
Private _Overloaded As Boolean = False
Private _ExposedMembers As New List(Of MemberInfo)
Private IsHover As Boolean
Public Property Color() As Color
Get
Return _Color
End Get
Set(ByVal value As Color)
_Color = value
End Set
End Property
Public Property Overloaded() As Boolean
Get
Return _Overloaded
End Get
Set(ByVal value As Boolean)
_Overloaded = True
End Set
End Property
Public ReadOnly Property ExposedMembers() As List(Of MemberInfo)
Get
Return _ExposedMembers
End Get
End Property
Public Overrides Property Text() As String
Get
Return _Text
End Get
Set(ByVal value As String)
_Text = value
End Set
End Property
Public ReadOnly Property DefaultColors(ByVal Index As MemberTypes) As Color
Get
Select Case Index
Case MemberTypes.NestedType
Return Drawing.Color.SlateBlue
Case MemberTypes.Constructor
Return Drawing.Color.BlueViolet
Case MemberTypes.Event
Return Drawing.Color.DarkOrange
Case MemberTypes.Method
Return Drawing.Color.Violet
Case MemberTypes.Property
Return Drawing.Color.SteelBlue
Case MemberTypes.Field
Return Drawing.Color.DimGray
End Select
End Get
End Property
Private Sub ItemBox_Paint(ByVal sender As System.Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles MyBase.Paint
Dim M As New MenuItem
Dim Str As String = Me.Text
Dim StrColor As Color = Me.ForeColor
Dim StrSize As SizeF
M.Size = New Size(Me.Size.Width - 1, Me.Size.Height - 1)
M.Location = New Point(0, 0)
M.Color = Me.Color
StrSize = e.Graphics.MeasureString(Me.Text, Me.Font, 1000)
If StrSize.Width > Me.Width * 9 / 10 Then
Str = Str.Remove(Str.Length * 8 / 10)
Str &= "..."
End If
If StrSize.Height > Me.Height * 9 / 10 Then
Me.Height += (StrSize.Height - Me.Height) * 11 / 10
Else
Me.Height = 35
End If
M.Draw(e.Graphics)
e.Graphics.DrawString(Str, Me.Font, New SolidBrush(Me.ForeColor), Me.Width / 2 - StrSize.Width / 2, Me.Height / 2 - StrSize.Height / 2 - 7)
End Sub
Private Sub ItemBox_MouseEnter(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.MouseEnter
IsHover = True
'Me.Refresh()
End Sub
Private Sub ItemBox_MouseLeave(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.MouseLeave
IsHover = False
'Me.Refresh()
End Sub
End Class