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

    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