Xceed Grid for WinForms v4.3 Documentation
CustomCalendar VB.NET
Welcome to Xceed Grid for WinForms v4.3 > Advanced Concepts > Editors - Advanced Concepts > Custom painting the WinCalendar control > CustomCalendar VB.NET

The following code provides the VB.NET implementation of the CustomCalendar class.

VB.NET Copy Code
Imports System
Imports System.Drawing
Imports System.Collections
Imports Xceed.Editors
 
Public Cass CustomCalendar
  Inherits WinCalendar
 
  Public Sub New( ByVal specialOccasions As ArrayList )
    MyBase.New( True, True )
    m_specialOccasions = specialOccasions
 
    Me.Width = Me.Width * 2
    Me.Height = Me.Height * 2
  End Sub
 
  Public ReadOnly Property SpecialOccasions As ArrayList
    Get
      Return m_specialOccasions
    End Get
  End Property
 
  Protected Overrides Readonly Property DefaultShowPreviewDays As Boolean
    Get
      Return False
    End Get
  End Property
 
  Protected Overrides Sub OnPaintDayBackground(ByVal e As PaintDayEventArgs)
    Dim occasion As SpecialOccasion
    For Each occasion In m_specialOccasions
      If occasion.SpecialDate = e.Value And occasion.RepeatPattern = RepeatPattern.Once Or _
         occasion.RepeatPattern = RepeatPattern.EveryDay Or _
         occasion.SpecialDate.DayOfWeek = e.Value.DayOfWeek And _
         occasion.RepeatPattern = RepeatPattern.EveryWeek) Or _
         (occasion.SpecialDate.Day = e.Value.Day And _
         occasion.RepeatPattern = RepeatPattern.EveryMonth) Or _
         (occasion.SpecialDate.Month = e.Value.Month And occasion.SpecialDate.Day = e.Value.Day And _
         occasion.RepeatPattern = RepeatPattern.EveryYear) Then
 
         e.Graphics.DrawImage(occasion.Image, e.ClipRectangle)
      End If
    Next occasion
  End Sub
 
  Protected Overrides Sub OnPaintDay(ByVal e As PaintDayEventArgs)
    Dim occasion As SpecialOccasion
    For Each occasion In m_specialOccasions
      If occasion.SpecialDate = e.Value And occasion.RepeatPattern = RepeatPattern.Once Or _
         occasion.RepeatPattern = RepeatPattern.EveryDay Or _
         (occasion.SpecialDate.DayOfWeek = e.Value.DayOfWeek And _
         occasion.RepeatPattern = RepeatPattern.EveryWeek) Or _
         (occasion.SpecialDate.Day = e.Value.Day And _
         occasion.RepeatPattern = RepeatPattern.EveryMonth) Or _
         (occasion.SpecialDate.Month = e.Value.Month And occasion.SpecialDate.Day = e.Value.Day And _
         occasion.RepeatPattern = RepeatPattern.EveryYear) Then
 
         If occasion.PaintText Then
           MyBase.OnPaintDay(e)
         End If
 
         Return
      End If
    Next occasion
    MyBase.OnPaintDay(e)
  End Sub
 
  Private m_specialOccasions As ArrayList = Nothing
End Class
 
Public Class SpecialOccasion
 
  Public Sub New( ByVal specialDate As DateTime, ByVal imagePath As String, ByVal repeatPattern As RepeatPattern, ByVal paintText As Boolean )
    If( imagePath = string.Empty ) Then
      Throw New ArgumentNullException( "imagePath", "A path to an image must be provided" )
    End If
 
    m_date = specialDate
    m_imagePath = imagePath
    m_repeatPattern = repeatPattern
    m_paintText = paintText
  End Sub  
 
  Public ReadOnly Property SpecialDate As DateTime
    Get
      Return m_date
    End Get
  End Property
 
  Public ReadOnly Property ImagePath As String
    Get
      Return m_imagePath
    End Get
  End Property
 
  Public ReadOnly Property RepeatPattern As RepeatPattern
    Get
      Return m_repeatPattern
    End Get
  End Property
 
  Public ReadOnly Property PaintText As Boolean
    Get
      Return m_paintText
    End Get
  End Property
   
  Private m_repeatPattern As RepeatPattern = RepeatPattern.Once
  Private m_date As DateTime = DateTime.MinValue
  Private m_imagePath As String = String.Empty
  Private m_paintText As Boolean = True   
End Class
 
Public Enum RepeatPattern
  Once
  EveryDay
  EveryWeek
  EveryMonth
  EveryYear
End Enum