private void SetRange(DateTime min, DateTime max) { if (IsHandleCreated) { int flags = 0; NativeMethods.SYSTEMTIMEARRAY sa = new NativeMethods.SYSTEMTIMEARRAY(); flags |= NativeMethods.GDTR_MIN | NativeMethods.GDTR_MAX; NativeMethods.SYSTEMTIME sys = DateTimePicker.DateTimeToSysTime(min); sa.wYear1 = sys.wYear; sa.wMonth1 = sys.wMonth; sa.wDayOfWeek1 = sys.wDayOfWeek; sa.wDay1 = sys.wDay; sa.wHour1 = sys.wHour; sa.wMinute1 = sys.wMinute; sa.wSecond1 = sys.wSecond; sa.wMilliseconds1 = sys.wMilliseconds; sys = DateTimePicker.DateTimeToSysTime(max); sa.wYear2 = sys.wYear; sa.wMonth2 = sys.wMonth; sa.wDayOfWeek2 = sys.wDayOfWeek; sa.wDay2 = sys.wDay; sa.wHour2 = sys.wHour; sa.wMinute2 = sys.wMinute; sa.wSecond2 = sys.wSecond; sa.wMilliseconds2 = sys.wMilliseconds; UnsafeNativeMethods.SendMessage(new HandleRef(this, Handle), NativeMethods.DTM_SETRANGE, flags, sa); } }
private void SetRange(DateTime minDate, DateTime maxDate) { // Keep selection range within passed in minDate and maxDate if (selectionStart < minDate) { selectionStart = minDate; } if (selectionStart > maxDate) { selectionStart = maxDate; } if (selectionEnd < minDate) { selectionEnd = minDate; } if (selectionEnd > maxDate) { selectionEnd = maxDate; } SetSelRange(selectionStart, selectionEnd); // Updated the calendar range // if (IsHandleCreated) { int flag = 0; NativeMethods.SYSTEMTIMEARRAY sa = new NativeMethods.SYSTEMTIMEARRAY(); flag |= NativeMethods.GDTR_MIN | NativeMethods.GDTR_MAX; NativeMethods.SYSTEMTIME sys = DateTimePicker.DateTimeToSysTime(minDate); sa.wYear1 = sys.wYear; sa.wMonth1 = sys.wMonth; sa.wDayOfWeek1 = sys.wDayOfWeek; sa.wDay1 = sys.wDay; sys = DateTimePicker.DateTimeToSysTime(maxDate); sa.wYear2 = sys.wYear; sa.wMonth2 = sys.wMonth; sa.wDayOfWeek2 = sys.wDayOfWeek; sa.wDay2 = sys.wDay; if ((int)UnsafeNativeMethods.SendMessage(new HandleRef(this, Handle), NativeMethods.MCM_SETRANGE, flag, sa) == 0) throw new InvalidOperationException(SR.GetString(SR.MonthCalendarRange, minDate.ToShortDateString(), maxDate.ToShortDateString())); } }
/// <include file='doc\MonthCalendar.uex' path='docs/doc[@for="MonthCalendar.SetSelRange"]/*' /> /// <devdoc> /// Upper must be greater than Lower /// </devdoc> /// <internalonly/> private void SetSelRange(DateTime lower, DateTime upper) { Debug.Assert(lower.Ticks <= upper.Ticks, "lower must be less than upper"); bool changed = false; if (selectionStart != lower || selectionEnd != upper) { changed = true; selectionStart = lower; selectionEnd = upper; } // always set the value on the control, to ensure that // it is up to date. // if (IsHandleCreated) { NativeMethods.SYSTEMTIMEARRAY sa = new NativeMethods.SYSTEMTIMEARRAY(); NativeMethods.SYSTEMTIME sys = DateTimePicker.DateTimeToSysTime(lower); sa.wYear1 = sys.wYear; sa.wMonth1 = sys.wMonth; sa.wDayOfWeek1 = sys.wDayOfWeek; sa.wDay1 = sys.wDay; sys = DateTimePicker.DateTimeToSysTime(upper); sa.wYear2 = sys.wYear; sa.wMonth2 = sys.wMonth; sa.wDayOfWeek2 = sys.wDayOfWeek; sa.wDay2 = sys.wDay; UnsafeNativeMethods.SendMessage(new HandleRef(this, Handle), NativeMethods.MCM_SETSELRANGE , 0, sa); } if (changed) { OnDateChanged(new DateRangeEventArgs(lower, upper)); } }
/// <include file='doc\MonthCalendar.uex' path='docs/doc[@for="MonthCalendar.GetMonthRange"]/*' /> /// <devdoc> /// </devdoc> /// <internalonly/> private SelectionRange GetMonthRange(int flag) { NativeMethods.SYSTEMTIMEARRAY sa = new NativeMethods.SYSTEMTIMEARRAY(); SelectionRange range = new SelectionRange(); UnsafeNativeMethods.SendMessage(new HandleRef(this, Handle), NativeMethods.MCM_GETMONTHRANGE, flag, sa); NativeMethods.SYSTEMTIME st = new NativeMethods.SYSTEMTIME(); st.wYear = sa.wYear1; st.wMonth = sa.wMonth1; st.wDayOfWeek = sa.wDayOfWeek1; st.wDay = sa.wDay1; range.Start = DateTimePicker.SysTimeToDateTime(st); st.wYear = sa.wYear2; st.wMonth = sa.wMonth2; st.wDayOfWeek = sa.wDayOfWeek2; st.wDay = sa.wDay2; range.End = DateTimePicker.SysTimeToDateTime(st); return range; }