⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 calendar.cs

📁 monthcalendar最全的日历monthcalendar最全的日历monthcalendar最全的日历
💻 CS
📖 第 1 页 / 共 5 页
字号:
                m_WeekDayItems[iTrailingDayCounter, 0].Day = iPrevTrailingMonthDays;
                m_WeekDayItems[iTrailingDayCounter, 0].Month = myPrevTrailingDate.Month;
                m_WeekDayItems[iTrailingDayCounter, 0].Year = myPrevTrailingDate.Year;
                //previous day
                iPrevTrailingMonthDays--;
            }

            int iCurrentMonthDays = DateTime.DaysInMonth(m_SelectedDate.Year, m_SelectedDate.Month);
            int iRowCounter = 0;
            int iFirstWeekDay = (int)(new DateTime(m_SelectedDate.Year, m_SelectedDate.Month, 1)).DayOfWeek;
            //write each monthday to array
            for (int iMonthDayCounter = 1; iMonthDayCounter <= iCurrentMonthDays; iMonthDayCounter++)
            {
                m_WeekDayItems[iWeekDayArrayPos, iRowCounter].TrailingDay = false;
                m_WeekDayItems[iWeekDayArrayPos, iRowCounter].Day = iMonthDayCounter;
                m_WeekDayItems[iWeekDayArrayPos, iRowCounter].Month = m_SelectedDate.Month;
                m_WeekDayItems[iWeekDayArrayPos, iRowCounter].Year = m_SelectedDate.Year;
                m_WeekDayItems[iWeekDayArrayPos, iRowCounter].WeekDay = (DayOfWeek)iFirstWeekDay;

                //get next weekday
                if (iFirstWeekDay == 6)
                    iFirstWeekDay = 0;
                else
                    iFirstWeekDay++;


                if (iWeekDayArrayPos == 6)
                {
                    iWeekDayArrayPos = 0;
                    iRowCounter++;
                }
                else
                {
                    iWeekDayArrayPos++;
                }
            }

            //get next trailing month
            DateTime myNextTrailingMonth = GetNextMonth(myFirstDate);
            int iNextTrailingMonthDays = DateTime.DaysInMonth(myNextTrailingMonth.Year, myNextTrailingMonth.Month);
            for (int iNextTrailingMonth = 1; iNextTrailingMonth <= iNextTrailingMonthDays; iNextTrailingMonth++)
            {
                m_WeekDayItems[iWeekDayArrayPos, iRowCounter].TrailingDay = true;
                m_WeekDayItems[iWeekDayArrayPos, iRowCounter].Day = iNextTrailingMonth;
                m_WeekDayItems[iWeekDayArrayPos, iRowCounter].Month = myNextTrailingMonth.Month;
                m_WeekDayItems[iWeekDayArrayPos, iRowCounter].Year = myNextTrailingMonth.Year;

                if (iWeekDayArrayPos == 6)
                {
                    iWeekDayArrayPos = 0;
                    //question if max rows 
                    if (iRowCounter < 5)
                    {
                        iRowCounter++;
                    }
                    else
                    {
                        //array writing complete exist for loop
                        break;
                    }
                }
                else
                {
                    iWeekDayArrayPos++;
                }
            }
            //m_WeekDayItems
        }

        /// <summary>
        /// check if the user selected date can be selected
        /// </summary>
        /// <param name="Date">user selected date</param>
        /// <returns>true if this date can be selected otherwise false</returns>
        private bool CanSelectDate(DateTime Date)
        {                      
            if (Date >= m_MinDate && Date <= m_MaxDate)
            {
                return true;
            }
            else
            {
                return false;
            }
        }

        /// <summary>
        /// add an datetime to the selecteditems collection
        /// </summary>
        /// <param name="myNewDate"></param>
        private void AddSelectedItem(DateTime myNewDate)
        {
            //if no multiple selectionmode is active clear selecteddates collection
            //befor add a new date
            if (m_bMultipleSelectingModeActive == false)
                m_SelectedDates.Clear();

            //select one item
            int iSelectedIndex = m_SelectedDates.IndexOf(myNewDate);
            if (iSelectedIndex == -1)
            {
                //add date
                m_SelectedDates.Add(myNewDate);
            }
            else
            {
                m_SelectedDates.RemoveAt(iSelectedIndex);
                this.Invalidate();
            }
        }

        /// <summary>
        /// returns the image for current month
        /// </summary>
        /// <returns>image</returns>
        private Image GetPaintMonthImage()
        {
            Image myMonthImage = m_MonthImages.JanuaryImage;
            switch (m_SelectedDate.Month)
            {
                case 1:
                    myMonthImage = m_MonthImages.JanuaryImage;
                    break;
                case 2:
                    myMonthImage = m_MonthImages.FebruaryImage;
                    break;
                case 3:
                    myMonthImage = m_MonthImages.MarchImage;
                    break;
                case 4:
                    myMonthImage = m_MonthImages.AprilImage;
                    break;
                case 5:
                    myMonthImage = m_MonthImages.MayImage;
                    break;
                case 6:
                    myMonthImage = m_MonthImages.JuneImage;
                    break;
                case 7:
                    myMonthImage = m_MonthImages.JulyImage;
                    break;
                case 8:
                    myMonthImage = m_MonthImages.AugustImage;
                    break;
                case 9:
                    myMonthImage = m_MonthImages.SeptemberImage;
                    break;
                case 10:
                    myMonthImage = m_MonthImages.OctoberImage;
                    break;
                case 11:
                    myMonthImage = m_MonthImages.NovemberImage;
                    break;
                case 12:
                    myMonthImage = m_MonthImages.DecemberImage;
                    break;
            }
            return myMonthImage;
        }

        private static Rectangle GetImageRect(DateItem Item, Image Img, int Width, int Height)
        {
            int iImgWidth = Img.Width;
            int iImgHeight = Img.Height;
            int iLeftPos = 0;
            int iTopPos = 0;
            switch (Item.ImageAlign)
            {
                case ContentAlignment.TopLeft:
                    iLeftPos = 0;
                    iTopPos = 0;
                    break;
                case ContentAlignment.TopCenter:
                    iTopPos = 0;
                    iLeftPos = (int)(Width - iImgWidth) / 2;
                    if (iLeftPos < 0) iLeftPos = 0;
                    break;
                case ContentAlignment.TopRight:
                    iTopPos = 0;
                    iLeftPos = Width - iImgWidth;
                    if (iLeftPos < 0) iLeftPos = 0;
                    break;
                case ContentAlignment.MiddleLeft:
                    iLeftPos = 0;
                    iTopPos = (int)(Height - iImgHeight) / 2;
                    if (iTopPos < 0) iTopPos = 0;
                    break;
                case ContentAlignment.MiddleCenter:
                    iTopPos = (int)(Height - iImgHeight) / 2;
                    if (iTopPos < 0) iTopPos = 0;
                    iLeftPos = (int)(Width - iImgWidth) / 2;
                    if (iLeftPos < 0) iLeftPos = 0;
                    break;
                case ContentAlignment.MiddleRight:
                    iTopPos = (int)(Height - iImgHeight) / 2;
                    if (iTopPos < 0) iTopPos = 0;
                    iLeftPos = Width - iImgWidth;
                    if (iLeftPos < 0) iLeftPos = 0;
                    break;
                case ContentAlignment.BottomLeft:
                    iLeftPos = 0;
                    iTopPos = Height - iImgHeight;
                    break;
                case ContentAlignment.BottomCenter:
                    iLeftPos = (int)(Width - iImgWidth) / 2;
                    if (iLeftPos < 0) iLeftPos = 0;
                    iTopPos = Height - iImgHeight;
                    break;
                case ContentAlignment.BottomRight:
                    iLeftPos = Width - iImgWidth;
                    if (iLeftPos < 0) iLeftPos = 0;
                    iTopPos = Height - iImgHeight;
                    break;
            }
            Rectangle myImageRect = new Rectangle(iLeftPos, iTopPos, iImgWidth, iImgHeight);
            return myImageRect;
        }

        #endregion

        #region PaintControl
        protected override void OnPaint(PaintEventArgs e)
        {
            if (m_bInitialised == false) m_bInitialised = true;
            base.OnPaint(e);

            if (m_WeekDayArrayAlreadyCreated == false)
            {
                m_WeekDayArrayAlreadyCreated = true;
                CreateWeekDaysArray();
            }

            switch (m_ViewMode) {
                case ViewMode.vmMonth:
                    DrawMonthImages(e);
                    //first drawi titlebar
                    DrawHeader(e);
                    //draw weekdayshortnames
                    DrawWeekDays(e);
                    //step two draw weenumbers
                    DrawWeekNumbers(e);
                    //draw weekdays
                    DrawMonthDays(e);

                    DrawFooter(e.Graphics);
                    break;
                case ViewMode.vmYear:
                    m_NextTopPos = 0;
                    DrawHeader(e);
                    DrawYear(e.Graphics);
                    break;
                case ViewMode.vm12Years:
                    m_NextTopPos = 0;
                    DrawHeader(e);
                    Draw12YearsRange(e.Graphics);
                    break;
                case ViewMode.vm120Years:
                    m_NextTopPos = 0;
                    DrawHeader(e);
                    Draw120YearsRange(e.Graphics);
                    break;
            }

            if (m_Border.Visible == true)
            {
                e.Graphics.DrawRectangle(new Pen(Color.FromArgb(m_Border.Transparency, m_Border.BorderColor)), new Rectangle(
                                         this.ClientRectangle.Left, this.ClientRectangle.Top,
                                         this.ClientRectangle.Width - 1, this.ClientRectangle.Height - 1));
            }

        }

        private void DrawMonthImages(PaintEventArgs e)
        {
            if (m_MonthImages.UseImages == true)
            {
                Image myMonthImage = GetPaintMonthImage();
                Rectangle myPaintRect = new Rectangle();

                if (myMonthImage != null) {
                    if (m_MonthImages.ImagePosition == MonthImagePosition.Top)
                    {
                        myPaintRect = new Rectangle(0, 0, this.Width, m_MonthImages.ImagesHeight);                        
                        m_NextTopPos = m_MonthImages.ImagesHeight + 1;
                    }
                    else if (m_MonthImages.ImagePosition == MonthImagePosition.CalendarBackground)
                    {
                        myPaintRect = this.ClientRectangle;                        
                        m_NextTopPos = 0;
                    }
                    else if (m_MonthImages.ImagePosition == MonthImagePosition.MonthBackground) {
                    	int iImageTopPos = GetTitleBarHeight() + GetWeekDaysHeight();
                    	int iImageLeftPos = GetWeekNumbersWidth();
                        int iMonthDayHeight = GetMonthDayHeight() + m_MonthDaysStyle.DaysPadding.Vertical; 
                        myPaintRect = new Rectangle(iImageLeftPos, iImageTopPos,
                    	                                       this.Width - GetWeekNumbersWidth()-1,
                                                               (6 * iMonthDayHeight) + m_MonthDayHeightOffset + 
                                                               m_MonthDaysStyle.DaysPadding.Vertical);                    	                        
                        m_NextTopPos = 0;
                    }
                    else m_NextTopPos = 0;
                    MonthImageRenderEventArgs myImageEvent = new MonthImageRenderEventArgs(e.Graphics,
                                                                 myPaintRect, myMonthImage);
                    if (MonthImageRender != null) MonthImageRender(this, myImageEvent);
                    if (myImageEvent.OwnerDraw == false)
                    {
                        //draw monthimage
                        e.Graphics.DrawImage(myMonthImage, myPaintRect);
                    }
                }

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -