| 
 using System; using System.Drawing; using System.Collections; using Xceed.Editors;  
namespace Xceed.Editors.Samples {   public class CustomCalendar : WinCalendar   {     public CustomCalendar( ArrayList specialOccasions )      : base( true, true )     {       m_specialOccasions = specialOccasions;       this.Width = this.Width * 2;       this.Height = this.Height * 2;     } 
    public ArrayList SpecialOccasions     {       get       {          return m_specialOccasions;        }     }     
    protected override bool DefaultShowPreviewDays     {       get       {          return false;        }     }   
    protected override void OnPaintDayBackground( PaintDayEventArgs e )     {        base.OnPaintDayBackground( e );  
      foreach( SpecialOccasion occasion in m_specialOccasions )       {         if( ( occasion.Date == e.Value && occasion.RepeatPattern == RepeatPattern.Once ) ||              ( occasion.RepeatPattern == RepeatPattern.EveryDay ) ||              ( ( occasion.Date.DayOfWeek == e.Value.DayOfWeek ) &&              occasion.RepeatPattern == RepeatPattern.EveryWeek ) ||              ( ( occasion.Date.Day == e.Value.Day ) &&              occasion.RepeatPattern == RepeatPattern.EveryMonth ) ||              ( ( occasion.Date.Month == e.Value.Month && occasion.Date.Day == e.Value.Day ) &&              occasion.RepeatPattern == RepeatPattern.EveryYear ) )         {           using( Bitmap image = new Bitmap( occasion.ImagePath ) )           {             e.Graphics.DrawImage( image, e.ClipRectangle );           }         }       }         } 
    protected override void OnPaintDay( PaintDayEventArgs e )     {        foreach( SpecialOccasion occasion in m_specialOccasions )       {         if( ( occasion.Date == e.Value && occasion.RepeatPattern == RepeatPattern.Once ) ||              ( occasion.RepeatPattern == RepeatPattern.EveryDay ) ||              ( ( occasion.Date.DayOfWeek == e.Value.DayOfWeek ) &&              occasion.RepeatPattern == RepeatPattern.EveryWeek ) ||              ( ( occasion.Date.Day == e.Value.Day ) &&              occasion.RepeatPattern == RepeatPattern.EveryMonth ) ||              ( ( occasion.Date.Month == e.Value.Month && occasion.Date.Day == e.Value.Day ) &&              occasion.RepeatPattern == RepeatPattern.EveryYear ) )         {           if( occasion.PaintText )              {             base.OnPaintDay( e );           }                     return;         }       }       base.OnPaintDay( e );     }     
    private ArrayList m_specialOccasions = null;   }  
  public class SpecialOccasion   {     public SpecialOccasion( DateTime date, string imagePath, RepeatPattern repeatPattern, bool paintText )     {             if( imagePath == string.Empty )         throw new ArgumentNullException( "imagePath", "A path to an image must be provided" );  
      m_date = date;       m_imagePath = imagePath;             m_repeatPattern = repeatPattern;       m_paintText = paintText;     }     
    public DateTime Date     {       get{ return m_date; }     }  
    public string ImagePath     {       get{ return m_imagePath; }     }  
    public RepeatPattern RepeatPattern     {       get{ return m_repeatPattern; }     }  
    public bool PaintText     {       get{ return m_paintText; }     }     
    private RepeatPattern m_repeatPattern = RepeatPattern.Once;     private DateTime m_date = DateTime.MinValue;     private string m_imagePath = string.Empty;        private bool m_paintText = true;       }  
  public enum RepeatPattern   {     Once,     EveryDay,     EveryWeek,     EveryMonth,     EveryYear   } }
  |