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

📄 calendar.cs

📁 monthcalendar最全的日历monthcalendar最全的日历monthcalendar最全的日历
💻 CS
📖 第 1 页 / 共 5 页
字号:
        #endregion

        #region Helperfunctions
        /// <summary>
        /// retrives the titlebarheight
        /// </summary>
        /// <returns>titlebarheight</returns>
        private int GetTitleBarHeight()
        {
            if (m_HeaderStyle.Visible == true)
            {
                return m_HeaderStyle.Font.Height + 2 * m_HeaderStyle.Padding.Vertical;
            }
            else return 0;
        }

        /// <summary>
        /// retrives the header height
        /// </summary>
        /// <returns>headerheight</returns>
        private int GetWeekDaysHeight()
        {
            if (m_WeekDaysStyle.Visible == true)
            {
                return m_WeekDaysStyle.Font.Height + 1;
            }
            else return 0;
        }

        /// <summary>
        /// Retrives the width used for weeknumbers
        /// </summary>
        /// <returns>weeknumbers width</returns>
        private int GetWeekNumbersWidth()
        {
            if (m_Graphics == null)
            {
                m_Graphics = this.CreateGraphics();
            }
            if (m_WeekNumbers.Visible == true)
            {
                SizeF myStringDimension = m_Graphics.MeasureString("53", m_WeekNumbers.Font);
                return (int)myStringDimension.Width + m_WeekNumbers.Padding;
            }
            else return 1; //draw no weeknumbers
        }

        /// <summary>
        /// Get the height of the today string in controlfooter
        /// </summary>
        /// <returns>the height of the todaystring</returns>
        private int GetTodayHeight()
        {
            if (m_Footer.Visible == true)
            {
                return m_Footer.Padding.Top + m_Footer.Font.Height + m_Footer.Padding.Bottom;                
            }
            else return 0;
        }

        /// <summary>
        /// get the needed header monthimage height
        /// </summary>
        /// <returns>H鰄e des Bildes</returns>
        private int GetMonthImageHeight()
        {
            if (m_MonthImages.UseImages == true && m_MonthImages.ImagePosition == MonthImagePosition.Top)
                return m_MonthImages.ImagesHeight;
            else return 0;
        }

        /// <summary>
        /// Returns the height of each monthday
        /// </summary>
        /// <returns>weekdayheight</returns>
        private int GetMonthDayHeight()
        {
            int iVerticalPadding = 7 * m_MonthDaysStyle.DaysPadding.Vertical;
            int iUseableHeight = this.Height - iVerticalPadding - (GetMonthImageHeight() + GetTitleBarHeight() +
                                 GetWeekDaysHeight()) - GetTodayHeight();
            int iValue = (int)iUseableHeight / 6;
            m_MonthDayHeightOffset = iUseableHeight - (iValue * 6);
            if (m_MonthDayHeightOffset < 0) m_MonthDayHeightOffset = 0;
            
            if (iValue < m_MonthDaysStyle.Font.Height)
            {
                iValue = m_MonthDaysStyle.Font.Height;
            }
            
            return iValue; 
        }        

        /// <summary>
        /// returns the monthday width
        /// </summary>
        /// <returns>monthdaywidth</returns>
        private int GetMonthDayWidth()
        {
            int iHorizontalPadding = 8 * m_MonthDaysStyle.DaysPadding.Horizontal;
            int iUseableWidth = this.Width - iHorizontalPadding - GetWeekNumbersWidth();
            int iMonthDayWidth = (int)iUseableWidth / 7;
            m_MonthDayWidthOffset = iUseableWidth - (iMonthDayWidth * 7);
            //m_MonthDayWidthOffset--;
            if (m_MonthDayWidthOffset < 0) m_MonthDayWidthOffset = 0;
            return iMonthDayWidth; 
        }

        /// <summary>
        /// get the needed width for the all month days in a row
        /// </summary>
        /// <returns></returns>
        private int GetNeededMonthDaysWidth()
        {
            if (m_Graphics == null)
            {
                m_Graphics = this.CreateGraphics();
            }
            int iMonthDayWidth = GetMonthDayWidth();
            SizeF myStringDimension = m_Graphics.MeasureString("30", m_MonthDaysStyle.Font);
            if (iMonthDayWidth < (int)myStringDimension.Width + 6)
            {
                iMonthDayWidth = (int)myStringDimension.Width + 6;
            }

            return (7 * iMonthDayWidth) + m_MonthDayWidthOffset + 
                   (8 * m_MonthDaysStyle.DaysPadding.Horizontal);
        }

        private int GetMonthDaysHeight()
        {
            return (6 * GetMonthDayHeight()) + 
                                 (7 * m_MonthDaysStyle.DaysPadding.Vertical) +
                                 m_MonthDayHeightOffset;
        }

        /// <summary>
        /// Get the First weekday from settings: the user definied first weekday or the systemdefault weekday
        /// </summary>
        /// <returns></returns>
        private DayOfWeek GetFirstWeekDay()
        {            
            //left startpos is m_WeeknumbersWidth
            if (m_FirstDayOfWeek == Day.Default)
            {
                return m_DateTimeFormatInfo.FirstDayOfWeek;
            }
            else
            {
                switch (m_FirstDayOfWeek)
                {
                    case Day.Monday:
                        return DayOfWeek.Monday;
                        break;
                    case Day.Tuesday:
                        return DayOfWeek.Tuesday;
                        break;
                    case Day.Wednesday:
                        return DayOfWeek.Wednesday;
                        break;
                    case Day.Thursday:
                        return DayOfWeek.Thursday;
                        break;
                    case Day.Friday:
                        return DayOfWeek.Friday;
                    case Day.Saturday:
                        return DayOfWeek.Saturday;
                        break;
                    case Day.Sunday:
                        return DayOfWeek.Sunday;
                        break;
                    default:
                        return DayOfWeek.Monday;
                        break;
                }                
            }            
        }

        /// <summary>
        /// returns the first weeknumber for selected month
        /// </summary>
        /// <returns>the first weeknumber for this month</returns>
        private int GetFirstWeekNumber(int Index)
        {            
             DayOfWeek myFirstWeekDay = GetFirstWeekDay();
             return m_DateTimeFormatInfo.Calendar.GetWeekOfYear(new DateTime(m_SelectedDate.Year, 
                                                                m_SelectedDate.Month, 1 + (Index * 7)), 
                                                                CalendarWeekRule.FirstDay, myFirstWeekDay);
        }

        /// <summary>
        /// get the previous of the current month
        /// </summary>
        /// <param name="Current">date from get the previous month</param>
        /// <returns>previous month date</returns>
        private DateTime GetPrevMonth(DateTime Current)
        {
            DateTime myNewDate = Current;
            if ((Current.Month == 1) && (Current.Year > 1753))
            {
                //change date to december of previous year
                myNewDate = new DateTime(Current.Year - 1, 12, 1);
            }
            else if ((Current.Month > 1) && (Current.Year >= 1753))
            {
                //change date to previous month in the same year
                myNewDate = new DateTime(Current.Year, Current.Month - 1, 1);
            }
            else
            {
                myNewDate = new DateTime(1752, 12, 1);
            }

            return myNewDate;
        }

        /// <summary>
        /// get the next of the current month
        /// </summary>
        /// <param name="Current">date from get the next month</param>
        /// <returns>next month data</returns>
        private DateTime GetNextMonth(DateTime Current)
        {
            DateTime myNewDate = Current;
            if ((Current.Month == 12) && (Current.Year < 9998))
            {
                myNewDate = new DateTime(Current.Year + 1, 1, 1);
            }
            else if ((Current.Month < 12) && (Current.Year <= 9998))
            {
                myNewDate = new DateTime(Current.Year, Current.Month + 1, 1);
            }
            else
            {
                myNewDate = new DateTime(9999, 1, 1);
            }
            return myNewDate;
        }

        /// <summary>
        /// get the previous year from current date
        /// </summary>
        /// <param name="Current">current date</param>
        /// <returns>the previous year</returns>
        private DateTime GetPrevYear(DateTime Current)
        {
            if (Current.Year > 1753)
                return new DateTime(Current.Year - 1, Current.Month, Current.Day);
            else
                return Current;
        }

        private DateTime GetNextYear(DateTime Current)
        {
            if (Current.Year < 9998)
                return new DateTime(Current.Year + 1, Current.Month, Current.Day);
            else
                return Current;
        }

        /// <summary>
        /// Get the array index for the first wwekday in selected month
        /// </summary>
        /// <param name="FirstWeekDay">the first weekday</param>
        /// <param name="DaysWeekDay">weekday from the first day in month</param>
        /// <returns>return the arrayindex for the first monthday</returns>
        private int GetFirstIndex(DayOfWeek FirstWeekDay, DayOfWeek DaysWeekDay)
        {
            int iArrayIndex = 0;
            bool bResultFound = false;
            for (int iWeekDayCounter = (int)FirstWeekDay; iWeekDayCounter <= 6; iWeekDayCounter++)
            {
                if (((DayOfWeek)iWeekDayCounter) == DaysWeekDay)
                {
                    bResultFound = true;
                    break;
                }
                iArrayIndex++;
            }
            if (bResultFound == false)
            {
                for (int iWeekDayCounter = 0; iWeekDayCounter < (int)FirstWeekDay; iWeekDayCounter++)
                {
                    if (((DayOfWeek)iWeekDayCounter) == DaysWeekDay)
                    {

                        break;
                    }
                    iArrayIndex++;
                }
            }
            return iArrayIndex;
        }


        /// <summary>
        /// Create the weekdays - arraylist to draw weekdays
        /// </summary>
        private void CreateWeekDaysArray()
        {
            //first get weekday from first day in month
            DateTime myFirstDate = new DateTime(m_SelectedDate.Year, m_SelectedDate.Month, 1);
            DayOfWeek myFirstWeekDay = myFirstDate.DayOfWeek;
            DayOfWeek myDefaultFirstWeekDay =  GetFirstWeekDay();
            int iWeekDayArrayPos = GetFirstIndex(myDefaultFirstWeekDay, myFirstWeekDay);
            DateTime myPrevTrailingDate = GetPrevMonth(myFirstDate);
            //get prevmonth days
            int iPrevTrailingMonthDays = DateTime.DaysInMonth(myPrevTrailingDate.Year, myPrevTrailingDate.Month);
            for (int iTrailingDayCounter = iWeekDayArrayPos - 1; iTrailingDayCounter >= 0; iTrailingDayCounter--)
            {
                m_WeekDayItems[iTrailingDayCounter, 0].TrailingDay = true;

⌨️ 快捷键说明

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