Back to Devexpress

CustomDrawDayNumberCellEventArgs Class

windowsforms-devexpress-dot-xtraeditors-dot-calendar-63b31ba1.md

latest6.6 KB
Original Source

CustomDrawDayNumberCellEventArgs Class

Provides data for the DateEdit.DrawItem event.

Namespace : DevExpress.XtraEditors.Calendar

Assembly : DevExpress.XtraEditors.v25.2.dll

NuGet Package : DevExpress.Win.Navigation

Declaration

csharp
public class CustomDrawDayNumberCellEventArgs :
    BaseEditCustomDrawArgs
vb
Public Class CustomDrawDayNumberCellEventArgs
    Inherits BaseEditCustomDrawArgs

CustomDrawDayNumberCellEventArgs is the data class for the following events:

Remarks

The DateEdit.DrawItem event gives you the ability to custom paint day number cells in the DateEdit‘s dropdown calendar. The CustomDrawDayNumberCellEventArgs class introduces properties which allow you to obtain data needed to paint a day number cell.

CustomDrawDayNumberCellEventArgs objects are automatically created and passed to the DateEdit.DrawItem event handlers.

Example

The following example handles the DateEdit.DrawItem event to custom paint non-working days within the dropdown calendar. These days are painted red (non-working days which don’t belong to the currently displayed month are painted light pink).

The following image shows the result.

csharp
using DevExpress.XtraEditors.Calendar;

private bool IsHoliday(DateTime dt) {
   //the specified date is a Saturday or Holiday
   if(dt.DayOfWeek == DayOfWeek.Saturday || dt.DayOfWeek == DayOfWeek.Sunday) return true;
   //New Year's Day
   if(dt.Day == 1 && dt.Month == 1) return true;
   //Inauguration Day
   if(dt.Year >= 1789 && (dt.Year - 1789) % 4 == 0) {
      if(dt.Day == 20 && dt.Month == 1) return true;
   }
   //Independence Day
   if(dt.Day == 4 && dt.Month == 7) return true;
   //Veterans Day
   if(dt.Day == 11 && dt.Month == 11) return true;
   //Christmas
   if(dt.Day == 25 && dt.Month == 12) return true;
   return false;
}
private void dateEdit1_DrawItem(object sender, CustomDrawDayNumberCellEventArgs e) {
    if (e.View != DevExpress.XtraEditors.Controls.DateEditCalendarViewType.MonthInfo) return;
    //return if a given date is not a holiday
    //in this case the default drawing will be performed (e.Handled is false)
    if (!IsHoliday(e.Date)) return;
    //highlight the selected and hot-tracked dates
    bool isHotTracked = e.State == DevExpress.Utils.Drawing.ObjectState.Hot;
    if (e.Selected || isHotTracked) {
        e.Cache.FillRectangle(e.Style.GetBackBrush(e.Cache), e.Bounds);
    }
    //the brush for painting days
    Brush brush = (e.Inactive ? Brushes.LightPink : Brushes.Red);
    //specify formatting attributes for drawing text
    StringFormat strFormat = new StringFormat();
    strFormat.Alignment = StringAlignment.Center;
    strFormat.LineAlignment = StringAlignment.Center;
    //draw the day number
    e.Cache.DrawString(e.Date.Day.ToString(), e.Style.Font, brush, e.Bounds, strFormat);
    //no default drawing is required
    e.Handled = true;
}
vb
Private Function IsHoliday(ByVal dt As DateTime) As Boolean
        'the specified date is a Saturday or Holiday
        If dt.DayOfWeek = DayOfWeek.Saturday Or dt.DayOfWeek = DayOfWeek.Sunday Then 
            Return True
        EndIf
        'New Year's Day
        If (dt.Day = 1 And dt.Month = 1) Then Return True
        'Inauguration Day
        If dt.Year >= 1789 And (dt.Year - 1789) Mod 4 = 0 Then
            If dt.Day = 20 And dt.Month = 1 Then Return True
        End If
        'Independence Day
        If dt.Day = 4 And dt.Month = 7 Then Return True
        'Veterans Day
        If dt.Day = 11 And dt.Month = 11 Then Return True
        'Christmas
        If dt.Day = 25 And dt.Month = 12 Then Return True
        Return False
End Function

Private Sub DateEdit1_DrawItem(ByVal sender As Object, _
  ByVal e As DevExpress.XtraEditors.Calendar.CustomDrawDayNumberCellEventArgs) _
  Handles DateEdit1.DrawItem
        If Not e.View = DevExpress.XtraEditors.Controls.DateEditCalendarViewType.MonthInfo Then Return
        'return if a given date is not a holiday
        'in this case the default drawing will be performed (e.Handled is false)
        If Not IsHoliday(e.Date) Then Return
        'highlight the selected and hot-tracked dates
        Dim isHotTracked As Boolean = (e.State = DevExpress.Utils.Drawing.ObjectState.Hot)
        If e.Selected Or isHotTracked Then e.Cache.FillRectangle(e.Style.GetBackBrush(e.Cache), e.Bounds)
        'the brush for painting days
        Dim brush As Brush = IIf(e.Inactive, Brushes.LightPink, Brushes.Red)
        'specify formatting attributes for drawing text
        Dim strFormat As StringFormat = New StringFormat
        strFormat.Alignment = StringAlignment.Center
        strFormat.LineAlignment = StringAlignment.Center
        'draw the day number
        e.Cache.DrawString(e.Date.Day.ToString(), e.Style.Font, brush, e.Bounds, strFormat)
        'no default drawing is required
        e.Handled = True
End Sub

Inheritance

Object EventArgs DevExpress.XtraEditors.Drawing.BaseEditCustomDrawArgs CustomDrawDayNumberCellEventArgs

See Also

CustomDrawDayNumberCellEventArgs Members

DrawItem

DevExpress.XtraEditors.Calendar Namespace