📄 calendar.cs
字号:
#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 + -