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

📄 calendar.cs

📁 monthcalendar最全的日历monthcalendar最全的日历monthcalendar最全的日历
💻 CS
📖 第 1 页 / 共 5 页
字号:
using System;
using System.Collections.Generic;
using System.Text;
using System.Windows.Forms;
using System.Globalization;
using System.Drawing;
using System.Drawing.Design;
using System.Drawing.Drawing2D;
using System.ComponentModel;
using System.Threading;

namespace MonthCalendar
{
    [DesignerAttribute(typeof(CalendarDesigner))]
    [DefaultProperty("Name")]
	public class Calendar: Control		
    {
        private CultureInfo m_Culture;
        private DateTimeFormatInfo m_DateTimeFormatInfo;
        private DatesCollection m_Dates = null;
        private SelectedItemsCollection m_SelectedDates = null;
        private Day m_FirstDayOfWeek = Day.Default;        
        private HeaderElementStyle m_HeaderStyle = null;
        private WeekDayElementStyle m_WeekDaysStyle = null;
        private WeekNumbersElementStyle m_WeekNumbers = null;
        private MonthDaysElementStyle m_MonthDaysStyle = null;
        private FooterElementStyle m_Footer = null;
        private MonthImageData m_MonthImages = null;
        private KeyboardControl m_KeyboardControl = null;
        private WeekDayItem[,] m_WeekDayItems = new WeekDayItem[7, 6];
        private BorderStyle m_Border;
        private DateTime m_SelectedDate = DateTime.Now;        
        private DateTime m_MinDate = new DateTime(1753, 1, 1);
        private DateTime m_MaxDate = new DateTime(9998, 12, 31);
        private Graphics m_Graphics;
        private ViewMode m_ViewMode = ViewMode.vmMonth;
        private SelectionMode m_SelectionMode = SelectionMode.smOne;
        private SelectedDay m_MouseSelectedDay;
        private SelectedDay m_MouseSelectedDayBackup;
        private SelectedDay m_StartMultiSelectionHover;
        private Button m_PreviousButton = null;
        private Button m_NextButton = null;
        private Button m_PreviousYearButton = null;
        private Button m_NextYearButton = null;
        private ImageList m_Images = null;
        private GlobalHook m_GloabalKeyBoardHook = new GlobalHook();
        private bool m_WeekDayArrayAlreadyCreated = false;        
        private bool m_MouseInTitleText = false;
        private bool m_MouseInWeekDay = false;
        private bool m_bMouseHover = false;
        private bool m_bKeyHandled = false;
        private bool m_bMOuseHoverHeader = false;
        private bool m_bOnlyMonthMode = false;
        private bool m_bMultipleSelectingModeActive = false;
        private bool m_bCanSelectTrailingDates = true;
        private bool m_bInitialised = false;
        private int m_Start12YearsRange = 2001;
        private int m_End12YearsRange = 2012;
        private int m_Start120YearsRange = 1990;
        private int m_End120YearsRange = 2100;
        private int m_NextTopPos = 0;
        private int m_TitlebarHeight = 0;
        private int m_WeekDayWidth = 0;
        private int m_WeekDayHeight = 0;
        private int m_MonthWidth = 0;
        private int m_MonthHeight = 0;
        private int m_SundayIndex = 0;
        private int m_FirstWeekNumber = 0;
        private int m_TitleTextLeftStartPos = 0;
        private int m_TitleTextWidth = 0;
        private int m_TitleTextTopStartPos = 0;
        private int m_TitleTextHeight = 0;
        private int m_WeekDaysTopStartPos = 0;
        private int m_WeekDaysLeftStartPos = 0;
        private int m_SelectedMonthIndex = 0;
        private int m_MonthDayWidthOffset = 0;
        private int m_MonthDayHeightOffset = 0;
        private int m_DrawedMonthDayTopStartPos = 0;
        private int m_DrawedMonthDayHeight = 0;
        
		public Calendar() {
			//initialize control
            this.ResizeRedraw = true;
            this.SetStyle(System.Windows.Forms.ControlStyles.DoubleBuffer, true);
            this.SetStyle(System.Windows.Forms.ControlStyles.SupportsTransparentBackColor, true);
            this.SetStyle(ControlStyles.UserPaint, true);
            this.SetStyle(System.Windows.Forms.ControlStyles.AllPaintingInWmPaint, true);
            this.SetStyle(ControlStyles.SupportsTransparentBackColor, true);
            this.SetStyle(ControlStyles.Selectable, true);
            this.UpdateStyles();

            m_Culture = CultureInfo.CurrentCulture;
            m_DateTimeFormatInfo = DateTimeFormatInfo.CurrentInfo;

            m_Dates = new DatesCollection(this);
            m_SelectedDates = new SelectedItemsCollection(this);
            //titlebar style element
            m_HeaderStyle = new HeaderElementStyle(this);
            m_HeaderStyle.Font = new Font(this.Font.Name, this.Font.Size);
            m_HeaderStyle.ForeColor = Color.FromArgb(255, 155, 155, 155);
            m_HeaderStyle.Border.Visible = false;
            m_HeaderStyle.Border.BorderColor = Color.Black;
            m_HeaderStyle.Border.Transparency = 255;
            m_HeaderStyle.Background.StartColor = Color.White;
            m_HeaderStyle.Background.EndColor = Color.Black;
            m_HeaderStyle.Background.Style = EStyle.esParent;
            m_HeaderStyle.Background.Gradient = GradientStyle.Vertical;
            m_HeaderStyle.Background.TransparencyStartColor = 255;
            m_HeaderStyle.Background.TransparencyEndColor = 255;
            //header style element
            m_WeekDaysStyle = new WeekDayElementStyle(this);
            m_WeekDaysStyle.Font = new Font(this.Font.Name, this.Font.Size);
            m_WeekDaysStyle.ForeColor = Color.FromArgb(255, 155, 155, 155);
            m_WeekDaysStyle.Border.Visible = true;
            m_WeekDaysStyle.Border.BorderColor = Color.Black;
            m_WeekDaysStyle.Border.Transparency = 255;
            m_WeekDaysStyle.Background.StartColor = Color.White;
            m_WeekDaysStyle.Background.EndColor = Color.Black;
            m_WeekDaysStyle.Background.TransparencyStartColor = 255;
            m_WeekDaysStyle.Background.TransparencyEndColor = 255;
            m_WeekDaysStyle.Background.Style = EStyle.esParent;
            m_WeekDaysStyle.Background.Gradient = GradientStyle.Vertical;
            //weeknumbers style element
            m_WeekNumbers = new WeekNumbersElementStyle(this);
            m_WeekNumbers.Font = new Font(this.Font.Name, this.Font.Size);
            m_WeekNumbers.ForeColor = Color.FromArgb(255, 155, 155, 155);
            m_WeekNumbers.Border.Visible = true;
            m_WeekNumbers.Border.BorderColor = Color.Black;
            m_WeekNumbers.Border.Transparency = 255;
            m_WeekNumbers.Background.StartColor = Color.White;
            m_WeekNumbers.Background.EndColor = Color.Black;
            m_WeekNumbers.Background.TransparencyStartColor = 255;
            m_WeekNumbers.Background.TransparencyEndColor = 255;
            m_WeekNumbers.Background.Style = EStyle.esParent;
            m_WeekNumbers.Background.Gradient = GradientStyle.Vertical;
            //weekday style
            m_MonthDaysStyle = new MonthDaysElementStyle(this);
            m_MonthDaysStyle.Font = new Font(this.Font.Name, this.Font.Size);
            m_MonthDaysStyle.ForeColor = Color.Black;
            m_MonthDaysStyle.Border.Visible = false;
            m_MonthDaysStyle.Border.BorderColor = Color.Black;
            m_MonthDaysStyle.Border.Transparency = 255;
            m_MonthDaysStyle.Background.StartColor = Color.White;
            m_MonthDaysStyle.Background.EndColor = Color.Black;
            m_MonthDaysStyle.Background.TransparencyStartColor = 255;
            m_MonthDaysStyle.Background.TransparencyEndColor = 255;
            m_MonthDaysStyle.Background.Style = EStyle.esParent;
            m_MonthDaysStyle.Background.Gradient = GradientStyle.Vertical;
            //
            m_Footer = new FooterElementStyle(this);
            //
            m_Border = new BorderStyle(this);
            m_Border.Visible = false;
            m_Border.BorderColor = Color.Black;
            m_Border.Transparency = 255;
            //
            m_KeyboardControl = new KeyboardControl(this);
            //
            m_MonthImages = new MonthImageData(this);            

            m_PreviousButton = new Button();
            m_PreviousButton.Image = Properties.Resources.previous;
            m_PreviousButton.Visible = false;
            m_PreviousButton.Click += new EventHandler(PrevClick);

            m_NextButton = new Button();
            m_NextButton.Image = Properties.Resources.next;
            m_NextButton.Visible = false;
            m_NextButton.Click += new EventHandler(NextClick);

            m_PreviousYearButton = new Button();
            m_PreviousYearButton.Image = Properties.Resources.PrevYear;
            m_PreviousYearButton.Visible = false;
            m_PreviousYearButton.Click += new EventHandler(PrevYearClick);

            m_NextYearButton = new Button();
            m_NextYearButton.Image = Properties.Resources.nextYear;
            m_NextYearButton.Visible = false;
            m_NextYearButton.Click += new EventHandler(NextYearClick);

            this.SetBounds(0, 0, 200, 175);

            this.Controls.Add(m_PreviousButton);
            this.Controls.Add(m_NextButton);
            this.Controls.Add(m_PreviousYearButton);
            this.Controls.Add(m_NextYearButton);
            //install keyboard hook
            m_GloabalKeyBoardHook.InstallKeyBoardHook();
            m_GloabalKeyBoardHook.OnKeyDown += new KeyEventHandler(Hook_KeyDown);
            m_GloabalKeyBoardHook.OnKeyUp += new KeyEventHandler(Hook_KeyUp);
        }

        protected override void Dispose(bool disposing)
        {
            //remove global keyboard hook
            m_GloabalKeyBoardHook.RemoveHook();

          
            base.Dispose(disposing);
        }

        #region properties

        [Browsable(false)]
        public SelectedItemsCollection Selected
        {
            get
            {
                return m_SelectedDates;
            }
        }

        [Description("set calendars startzoom"), Category("Behavior")]
        public ViewMode StartWithZoom
        {
            get
            {
                return m_ViewMode;
            }
            set
            {
                m_ViewMode = value;
                Invalidate();
            }
        }

        [Description("set true to select days from other month"), Category("Behavior")]
        public bool CanSelectTrailingDates
        {
            get
            {
                return m_bCanSelectTrailingDates;
            }
            set
            {
                m_bCanSelectTrailingDates = value;
                if (CanSelectTrailingDatesChanged != null) CanSelectTrailingDatesChanged(this, EventArgs.Empty);
            }
        }

        [Description("set mode to select days"), Category("Behavior")]
        public SelectionMode SelectionMode
        {
            get
            {
                return m_SelectionMode;
            }
            set
            {
            	if (value == SelectionMode.smMulti)
            		AddSelectedItem(m_SelectedDate);
                m_SelectionMode = value;
                if (SelectionModeChanged != null) SelectionModeChanged(this, EventArgs.Empty);
            }
        }

        [DesignerSerializationVisibility(DesignerSerializationVisibility.Content)]
        [Description("Set footer style"), Category("Appearance")]
        public FooterElementStyle Footer
        {
            get
            {
                return m_Footer;
            }
        }

        [DesignerSerializationVisibility(DesignerSerializationVisibility.Content)]
        [Description("set calendars borderstyle"), Category("Appearance")]
        public BorderStyle Border
        {
            get
            {
                return m_Border;
            }
        }

        [Category("Behavior")]
        [Description("if true user cannot zoomout calendar to a other range")]
        public bool OnlyMonthMode
        {
            get
            {
                return m_bOnlyMonthMode;
            }
            set
            {
                m_bOnlyMonthMode = value;
                //set viewmode to month mode
                if (value == true)
                {
                    if (m_ViewMode != ViewMode.vmMonth)
                    {
                        SetViewMode(ViewMode.vmMonth, m_ViewMode);
                    }
                }
                if (OnlyMonthModeChanged != null) OnlyMonthModeChanged(this, EventArgs.Empty);
            }
        }

        [DesignerSerializationVisibility(DesignerSerializationVisibility.Content)]
        [Category("Behavior"), Description("setup calendar keyboard steering")]
        public KeyboardControl Keyboard
        {
            get
            {
                return m_KeyboardControl;
            }
        }

        [Description("set imagelist used with formated days"), Category("Behavior")]

⌨️ 快捷键说明

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