/// <summary>
        /// Move to the next month.
        /// </summary>
        public void NextMonth()
        {
            // Get the number of months to move
            int move = _calendar.ScrollChange;

            if (move == 0)
            {
                move = 1;
            }

            // Calculate the next set of months shown
            DateTime nextMonth = _displayMonth.AddMonths(move);
            DateTime lastDate  = nextMonth.AddMonths(_calendar.CalendarDimensions.Width *
                                                     _calendar.CalendarDimensions.Height);

            DateTime ld    = lastDate.AddDays(-1);
            DateTime ldofm = LastDayOfMonth(_calendar.MaxDate);

            // We do not move the month if doing so moves it past the maximum date
            if (lastDate.AddDays(-1) <= LastDayOfMonth(_calendar.MaxDate))
            {
                // Use the newly calculated month
                _displayMonth = nextMonth;

                // If the end of the selection is no longer visible
                if (_calendar.SelectionEnd < _displayMonth)
                {
                    // Find new selection dates
                    DateTime newSelStart = _calendar.SelectionStart.AddMonths(move);
                    DateTime newSelEnd   = _calendar.SelectionEnd.AddMonths(move);

                    // Impose the min/max dates
                    if (newSelStart > _calendar.MaxDate)
                    {
                        newSelStart = _calendar.MaxDate;
                    }

                    if (newSelEnd > _calendar.MaxDate)
                    {
                        newSelEnd = _calendar.MaxDate;
                    }

                    // Shift selection onwards
                    _calendar.SetSelectionRange(newSelStart, newSelEnd);
                }

                _needPaintDelegate(this, new NeedLayoutEventArgs(true));
            }
        }