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