Custom ComboBox loses animation effect.
Hey all, i tried to create a custom combobox with borders and some additional things to make it look more modern. Here is the code of the paint method i call inside OnPaint
Code:
Public Sub CustomPaint(screenGraphics As Graphics)
' If there is body to be drawn.
If Me.Width > 0 AndAlso Me.Height > 0 Then
' Clear the background image graphics
If Me.m_backImage Is Nothing Then
' Cached Background Image
Me.m_backImage = New Bitmap(Me.Width, Me.Height)
Dim backGraphics As Graphics = Graphics.FromImage(Me.m_backImage)
backGraphics.Clear(Color.Transparent)
Me.PaintTransparentBackground(backGraphics, Me.ClientRectangle)
End If
m_BackGraphics.Clear(Color.Transparent)
m_BackGraphics.DrawImageUnscaled(Me.m_backImage, 0, 0)
m_ControlGraphics.Clear(Color.Transparent)
m_ControlGraphics.SmoothingMode = SmoothingMode.HighQuality
'm_ControlGraphics.Clip = New Region(GetBoxBorder())
' Begin drawing
'Calculate the current dropdown rectangle
DropDownRectangle = New Rectangle(Bounds.Right - SplitSectionWidth, 0, SplitSectionWidth, Bounds.Height)
Using pen As Pen = New Pen(Color.Black)
m_ControlGraphics.DrawPath(pen, GetBoxBorder())
PaintArrowAndLine(m_ControlGraphics)
End Using
m_ControlGraphics.Flush()
m_BackGraphics.DrawImage(m_ControlBuffer,
New Rectangle(0, 0,
m_ControlBuffer.Width,
m_ControlBuffer.Height),
0, 0,
m_ControlBuffer.Width,
m_ControlBuffer.Height,
GraphicsUnit.Pixel)
m_BackGraphics.Flush()
' Now paint this to the screen
screenGraphics.DrawImageUnscaled(m_BackBuffer, 0, 0)
End If
End Sub
and here is the code for de DrawItem method,
Code:
Protected Overrides Sub OnDrawItem(e As DrawItemEventArgs)
Dim brush As SolidBrush = New SolidBrush(Color.LightGray)
e.Graphics.SmoothingMode = SmoothingMode.HighQuality
If e.Index < 0 Then Exit Sub
Dim rect As Rectangle = e.Bounds
Dim TextBrush As Brush
Dim index As Integer = If(e.Index >= 0, e.Index, 0)
If e.State And DrawItemState.Selected Then
'selection background color
e.Graphics.FillRectangle(brush, rect)
'selection forecolor
TextBrush = Brushes.White
e.Graphics.DrawString(Me.Items(index).ToString(), e.Font, TextBrush, e.Bounds, StringFormat.GenericDefault)
Else
e.Graphics.FillRectangle(Brushes.White, rect)
TextBrush = Brushes.Black
e.Graphics.DrawString(Me.Items(index).ToString(), e.Font, TextBrush, e.Bounds, StringFormat.GenericDefault)
End If
MyBase.OnDrawItem(e)
End Sub
My problem is that i lose the animation it makes when displaying the items. I should note that when used isolated the animation works great, but when in some other VS projects it stops working. The items appear suddenly, with no sliding.
Any recommendations?