windowsforms-devexpress-dot-xtraeditors-dot-calendar-63b31ba1.md
Provides data for the DateEdit.DrawItem event.
Namespace : DevExpress.XtraEditors.Calendar
Assembly : DevExpress.XtraEditors.v25.2.dll
NuGet Package : DevExpress.Win.Navigation
public class CustomDrawDayNumberCellEventArgs :
BaseEditCustomDrawArgs
Public Class CustomDrawDayNumberCellEventArgs
Inherits BaseEditCustomDrawArgs
CustomDrawDayNumberCellEventArgs is the data class for the following events:
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.
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.
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;
}
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
Object EventArgs DevExpress.XtraEditors.Drawing.BaseEditCustomDrawArgs CustomDrawDayNumberCellEventArgs
See Also