精华内容
下载资源
问答
  • winform日历控件

    2020-12-25 12:11:42
    分享一个漂亮的winform自定义控件,做考勤、日程管理、计划最好的自定义控件了,能够添加备注等等。 源码下载:https://download.csdn.net/download/u010919083/13778724

     分享一个漂亮的winform自定义控件,做考勤、日程管理、计划最好的自定义控件了,能够添加备注等等。

    源码下载:https://download.csdn.net/download/u010919083/13778724

    展开全文
  • winform日历控件V1.1

    2014-09-30 16:01:37
    winform日历控件前一版本的升级版,去除了原先的2种样式的大小,改换了自适应宽高的方式。
  • Winform日历控件源码

    2014-04-17 08:48:54
    鉴于VS自带的日历控件使用起来很不方便,于是自己使用datagridview开发了一个好用的,目前该控件仅支持yyyy-MM-dd一种格式,有兴趣的可以自己进行扩展。
  • 一款不错的日历控件。类似outlook的,简单,易懂的,可供一些项目的试用,代码齐全
  • 漂亮的winform日历控件(类似outlook)

    热门讨论 2011-06-10 11:37:50
    自我感觉这款日历控件的确很漂亮,简洁,清新的,比outlook还漂亮了那么一点点,自己还加了一些小功能,希望可以对大家有用
  • [img=https://img-bbs.csdn.net/upload/201607/25/1469389271_949034.png][/img] ---最好是和图片一样的这个。 求1个WINFORM日历控件,可以设置空值的。
  • 写个继承System.Windows.Forms.Panel的控件替换日历控件中的刚刚出事的panel,搞定 namespace shiney.winform.skins.controls { /// /// 这是一个支持双缓冲的Panel控件 /// public partial class XPanel :...

    【问题现象】

    在一个panel的paint handler中绘制日历界面,尽管整个用户控件/窗口设置了双缓冲属性,但是还是会闪烁,

    使用类似下面注释中的 画布中绘图也无济于事

      private void MBCalendar_Grid_Paint(object sender, PaintEventArgs e)
            {
                //Panel pnl = sender as Panel;
                //Bitmap bmp = new Bitmap(pnl.ClientSize.Width, pnl.ClientSize.Height);
                //Graphics gph = Graphics.FromImage(bmp);  
                Graphics gph = e.Graphics;
    


    【问题原因】

    VS自带的System.Windows.Forms.Panel控件没有双缓冲功能


    【解决方案】

    写个继承System.Windows.Forms.Panel的控件替换日历控件中的刚刚出事的panel,搞定

    namespace shiney.winform.skins.controls
    {
        /// <summary>
        /// 这是一个支持双缓冲的Panel控件
        /// </summary>
        public partial class XPanel : Panel
        {
            #region Constructors
            public XPanel():base()
            {
                setStyles();
            }
            #endregion
    
            #region Private Methods
            private void setStyles()
            {
                SetStyle(ControlStyles.UserPaint, true);
                SetStyle(ControlStyles.AllPaintingInWmPaint, true);
                SetStyle(ControlStyles.OptimizedDoubleBuffer, true);
                SetStyle(ControlStyles.ResizeRedraw, true);
                SetStyle(ControlStyles.SupportsTransparentBackColor, true);
                UpdateStyles();
            }
            #endregion
        }
    }



    展开全文
  • Winform自定义日历控件

    2020-12-25 12:03:36
    Winform自定义日历控件,做日历相关业务最需要的,比如考勤、日程安排、任务计划等等
  • WinForm窗体控件库和日历算法WinForm窗体控件库和日历算法 控件制作 算法先来看看效果图 图中展现的是一个日历自定义控件,其显示格里高利历、农历及节气。控件制作 创建一个窗体控件库项目,新建两个控件:...

    WinForm窗体控件库和日历算法

    先来看看效果图
    效果图
    图中展现的是一个日历自定义控件,其显示格里高利历、农历及节气。

    控件制作

    1. 创建一个窗体控件库项目,新建两个控件:PanelDay和PanelMonth;
      calendar1
    2. PanelDay的组成为三个Label控件,分别填写格里历、农历和节气。
      calendar2
      控件代码如下:
        public partial class PanelDay: UserControl
        {
            public PanelDay()
            {
                InitializeComponent();
                this.labelSolar.Enabled = false;
                this.labelLunar.Enabled = false;
                this.labelTerms.Enabled = false;
            }
    
            private string strSolar = "";
            private string strLunar = "";
            private string strTerms = "";
            private MyDrawingMode myDrawingMode;
    
            public string Solar
            {
                get { return strSolar; }
                set
                {
                    strSolar = value;
                    labelSolar.Text = strSolar;
                }
            }
    
            public string Lunar
            {
                get { return strLunar; }
                set
                {
                    strLunar = value;
                    labelLunar.Text = strLunar;
                }
            }
    
            public string Terms
            {
                get { return strTerms; }
                set
                {
                    strTerms = value;
                    labelTerms.Text = strTerms;
                    workTerms();
                }
            }
    
            public enum MyDrawingMode
            {
                Default = 0,
                Terms = 1
            }
    
            public MyDrawingMode DrawingMode
            {
                get { return myDrawingMode; }
                set
                {
                    myDrawingMode = value;
                    workDM();
                }
            }
    
            private void workDM()
            {
                switch (myDrawingMode)
                {
                    case MyDrawingMode.Default:
                        labelSolar.Location = new System.Drawing.Point(0, 0);
                        labelSolar.Size = new System.Drawing.Size(56, 40);
                        labelLunar.Location = new System.Drawing.Point(0, 40);
                        labelLunar.Size = new System.Drawing.Size(56, 20);
                        labelTerms.Location = new System.Drawing.Point(0, 45);
                        labelTerms.Size = new System.Drawing.Size(56, 15);
                        labelTerms.Visible = false;
                        break;
                    case MyDrawingMode.Terms:
                        labelSolar.Location = new System.Drawing.Point(0, 0);
                        labelSolar.Size = new System.Drawing.Size(56, 30);
                        labelLunar.Location = new System.Drawing.Point(0, 30);
                        labelLunar.Size = new System.Drawing.Size(56, 15);
                        labelTerms.Location = new System.Drawing.Point(0, 45);
                        labelTerms.Size = new System.Drawing.Size(56, 15);
                        labelTerms.Visible = true;
                        break;
                    default:
                        labelSolar.Location = new System.Drawing.Point(0, 0);
                        labelSolar.Size = new System.Drawing.Size(56, 40);
                        labelLunar.Location = new System.Drawing.Point(0, 40);
                        labelLunar.Size = new System.Drawing.Size(56, 20);
                        labelTerms.Location = new System.Drawing.Point(0, 45);
                        labelTerms.Size = new System.Drawing.Size(56, 15);
                        labelTerms.Visible = false;
                        break;
                }
            }
    
            private void workTerms()
            {
                if (strTerms == string.Empty) myDrawingMode = MyDrawingMode.Default;
                else myDrawingMode = MyDrawingMode.Terms;
                workDM();
            }
        }

    PanelDay为自定义控件,三个属性为格里历、农历和节气,都为字符串。两个绘图模板用枚举来表示。
    PanelMonth由三个主要面板组成,即Search、Week、Wall;
    calendar3
    代码如下:

        public partial class PanelMonth : UserControl
        {
            public PanelMonth()
            {
                InitializeComponent();
                DisplayPD(datetime);
            }
    
            private DateTime datetime=System.DateTime.Now;
    
            public DateTime Datetime
            {
                get { return datetime; }
                set
                {
                    datetime = value;
                    dateTimePicker.Value = datetime;
                }
            }
    
            public void Add(PanelDay pd,int x,int y)
            {
                pd.Location = new System.Drawing.Point(x * 56, y * 62);
                panelWall.Controls.Add(pd);
            }
    
            public void Add(PanelDay pd)
            {
                panelWall.Controls.Add(pd);
            }
    
            public void DisplayPD(DateTime datetime)
            {
                panelWall.Controls.Clear();
                DateTimeDS dt = new DateTimeDS();
                int dim = dt.daysInMonth(dateTimePicker.Value.Year, dateTimePicker.Value.Month);
                PanelDay[] panelday = new PanelDay[dim];
                for (int d = 0; d < dim; d++)
                {
                    panelday[d] = new PanelDay();
                    panelday[d].Name = "pd" + (d + 1).ToString();
                    panelday[d].Solar = (d + 1).ToString();
                    panelday[d].Lunar = dt.getLunarDay(dateTimePicker.Value.Year, dateTimePicker.Value.Month, d + 1);
                    panelday[d].MouseEnter += new EventHandler(PanelMonth_MouseEnter);
                    panelday[d].MouseLeave += new EventHandler(PanelMonth_MouseLeave);
                    panelday[d].MouseClick += PanelMonth_MouseClick;
                    panelday[d].Terms = dt.terms(new DateTime(dateTimePicker.Value.Year, dateTimePicker.Value.Month, d + 1));
                    if (datetime.Day == d + 1)
                    {
                        panelday[d].BackColor = Color.Green;
                    }
                }
                int index = 0;
                DateTime newtime = dateTimePicker.Value;
                DateTime firstdaytime = new DateTime(newtime.Year, newtime.Month, 1);
                int firstday = (int)firstdaytime.DayOfWeek;
                for (int i = 0; i < 6; i++)
                {
                    for (int j = 0; j < 7; j++)
                    {
    
                        if (i == 0 && j < firstday) { }
                        else if (index < dim)
                        {
                            Add(panelday[index], j, i);
                            index++;
                        }
    
                    }
                }
            }
    
            private void PanelMonth_MouseClick(object sender, EventArgs e)
            {
                PanelDay pd = (PanelDay)sender;
                pd.BackColor = System.Drawing.Color.Green;
                datetime = new DateTime(dateTimePicker.Value.Year, dateTimePicker.Value.Month, Convert.ToInt32(pd.Solar));
                dateTimePicker.Value = datetime;
                DisplayPD(datetime);
            }
    
            private void PanelMonth_MouseEnter(object sender, EventArgs e)
            {
                PanelDay pd = (PanelDay)sender;
                if (dateTimePicker.Value.Year != datetime.Year || dateTimePicker.Value.Month != datetime.Month || dateTimePicker.Value.Day != Convert.ToInt32(pd.Solar))
                {
                    pd.BackColor = System.Drawing.Color.DarkSeaGreen;
                }
            }
    
            private void PanelMonth_MouseLeave(object sender, EventArgs e)
            {
                PanelDay pd = (PanelDay)sender;
                if (dateTimePicker.Value.Year != datetime.Year || dateTimePicker.Value.Month != datetime.Month || dateTimePicker.Value.Day != Convert.ToInt32(pd.Solar))
                {
                    pd.BackColor = System.Drawing.Color.Azure;
                }
            }
    
            private void dateTimePicker_ValueChanged(object sender, EventArgs e)
            {
                datetime = dateTimePicker.Value;
                DisplayPD(datetime);
            }
        }

    PanelMonth主要区域有三个:
    一为时间定义,输入日期,显示日历;
    二为星期,只有显示的作用;
    三为填充面板,显示动态创建的PanelDay。
    PanelMonth自定义了一个属性就是Datetime,默认为当前时间,起选择的作用。

    算法

    1. 格里历算法
            #region 根据年月获得当月天数
            public int daysInMonth(int year, int month)
            {
                int days = 0;
                switch (month)
                {
                    case 1: case 3: case 5: case 7: case 8: case 10: case 12:days = 31;break;
                    case 4: case 6: case 9: case 11:days = 30;break;
                    case 2:
                        if ((year % 100 != 0 && year % 4 == 0) || (year % 400 == 0)) days = 29;
                        else days = 28;
                        break;
                    default:days = 0;break;
                }
                return days;
            }
            #endregion

    这只是人为地创造出更符合纪日的方法,跟地理人文没啥关系。1582年还人为修改过,呵呵。
    2. 农历添加

    #region 根据日期获得节气
    #region
            public string getLunarDay(int year, int month, int day)
            {
                string[] lunarstr1 = { "一", "二", "三", "四", "五", "六", "七", "八", "九", "十" };
                string[] lunarstr2 = { "初", "十", "廿", "卅" };
                string[] lunarmonthstr = { "正月", "二月", "三月", "四月", "五月", "六月", "七月", "八月", "九月", "十月", "冬月", "腊月" };
                ChineseLunisolarCalendar calendar = new ChineseLunisolarCalendar();
                DateTime datetime = new DateTime(year, month, day);
                int lunaryear = calendar.GetYear(datetime);
                int lunarmonth = calendar.GetMonth(datetime);
                int lunarday = calendar.GetDayOfMonth(datetime);
                int leapmonth = calendar.GetLeapMonth(lunaryear);
                if (leapmonth > 0)
                {
                    if (leapmonth <= lunarmonth)
                    {
                        lunarmonth--;
                    }
                }
                if (lunarday == 1)
                {
                    return lunarmonthstr[lunarmonth - 1].ToString();
                }
                else
                {
                    if (lunarday > 1 && lunarday <= 10)
                    {
                        return lunarstr2[0].ToString() + lunarstr1[lunarday - 1].ToString();
                    }
                    else if (lunarday > 10 && lunarday < 20)
                    {
                        return lunarstr2[1].ToString() + lunarstr1[lunarday % 10 - 1].ToString();
                    }
                    else if (lunarday == 20)
                    {
                        return "二十";
                    }
                    else if (lunarday > 20 && lunarday < 30)
                    {
                        return lunarstr2[2].ToString() + lunarstr1[lunarday % 10 - 1].ToString();
                    }
                    else if (lunarday == 30)
                    {
                        return "三十";
                    }
                    else
                    {
                        return "卅一";
                    }
                }
            }
            #endregion

    .NET中有个ChineseLunisolarCalendar类,我们一定要尊重前人的劳动成果,我们现在所做的一切都是以踩在巨人的肩膀上为代价的。从中我们很轻易获取农历日期,我们只需改为汉字形式就行了。
    3. 节气

            #region 根据日期获得节气
            public string terms(DateTime date)
            {
                string[] SolarTerm = new string[] { "小寒", "大寒", "立春", "雨水", "惊蛰", "春分", "清明", "谷雨", "立夏", "小满", "芒种", "夏至", "小暑", "大暑", "立秋", "处暑", "白露", "秋分", "寒露", "霜降", "立冬", "小雪", "大雪", "冬至" };
                int[] sTermInfo = new int[] { 0, 21208, 42467, 63836, 85337, 107014, 128867, 150921, 173149, 195551, 218072, 240693, 263343, 285989, 308563, 331033, 353350, 375494, 397447, 419210, 440795, 462224, 483532, 504758 };
                DateTime baseDateAndTime = new DateTime(1900, 1, 6, 2, 5, 0); //#1/6/1900 2:05:00 AM#
                DateTime newDate;
                double num;
                int y;
                string tempStr = "";
    
                y = date.Year;
    
                for (int i = 1; i <= 24; i++)
                {
                    num = 525948.76 * (y - 1900) + sTermInfo[i - 1];
                    newDate = baseDateAndTime.AddMinutes(num);
                    if (newDate.DayOfYear == date.DayOfYear)
                    {
                        tempStr = SolarTerm[i - 1];
                        break;
                    }
                }
                return tempStr;
            }
            #endregion

    节气本来可以分为二十四等份,如果地球对着太阳作匀速圆周运动的话。但是太阳只是在一个地球椭圆轨道的焦点上,这就造成了节气时长不等。如果只是这样的话还可以时长固定,但是地球的自转轴和地球椭圆轨道所在面并不垂直,地球每年西退,这种现象有专业名词表示,岁差。此外由于地球并不是非常接近于球形的,在自转的过程中会收到太阳和月亮的拉拉扯扯,这种现象也有专业名词表示,章动。所幸人们只可以活百岁,生活中不需要了解大周期中的小周期。某种情形下,暂时的可以为永久的,可以直接当做一个表来读取数据。

    展开全文
  • winform自定义日历控件

    千次阅读 2018-11-26 14:44:25
    自定义日历控件的功能  以一个重写的panel控件为基础,重写的panel实现了日期圆形的背景色,然后以此基础再做一个自定义控件PanelDay,最后根据年月计算该月的日期分布,最后将PanelDay按照计算结果添加到...

    先上效果图

     

    自定义日期控件
    自定义日历控件的功能

     

    以一个重写的panel控件为基础,重写的panel实现了日期圆形的背景色,然后以此基础再做一个自定义控件PanelDay,最后根据年月计算该月的日期分布,最后将PanelDay按照计算结果添加到PanelMonth上,实现最后的效果。因为日期是根据算法计算出来的,然后每个月的日期分布都是重新加载的,所有改变年份和月份后加载速度有点儿慢,大家有更好的方法,欢迎评论!

    源码里面我根据自己的需要,只能选中一个日期,可以根据自己的需要修改一些方法,也可以实现选中多个日期。

    源码在面百度网盘链接,需要的朋友可以下载,根据自己需要修改部分东西,第一次发这种自己写的控件,以后如果有觉得不错的自定义控件,会继续分享出来,希望对有需要的朋友有帮助!

    源码百度网盘链接
    链接:https://pan.baidu.com/s/1IHEkEUGhbPjimtoHvxSouQ
    提取码:5bi8

    展开全文
  • C# 自定义日历控件美化练习,希望大家喜欢!
  • 类似winform日历控件

    2007-07-29 15:27:15
    可以在asp.net页面设定htc的关联css ,即可以轻松的选取日期
  • winform控件技巧

    2018-08-06 10:33:31
    c#,winform控件使用技巧,共27个示例及源码,Popup窗口提醒,Vista风格的日历
  • winform好看的日历控件

    2019-02-27 08:44:59
    一个显示日期好看的小demo,可以自己加入一些节假日的备注,可以设置为桌面日历,内容包含农历,公立,日期等等,UI可以随自己切换
  • 日历控件(DateTimePicker)是一个基于微软.NET平台的WebControl,和WinForm下的日历控件类似,支持弹出下拉单,能够通过样式设定快捷的定制风格。主要特点为能够在不刷新页面的情况下更改时间,获取时间。是开发B/S...
  • winform写的日历控件

    2008-11-26 20:46:27
    生产日历 生产日历 生产日历 生产日历 生产日历 生产日历 生产日历生产日历
  • .Net WinForm程序,在ToolStrip添加DateTimePicker日历控件
  • Essential Schedule for Windows Forms是一款功能强大的日历日程控件,可以添加OutLook外观的日历日程到你的应用程序中,完全支持设计时设置时间表样式和行为,支持数据绑定,多种时间视图、本地化,自定义外观和...
  • 很漂亮的日历控件,简单,易懂的,有demo,可以先看一下效果的,如果不是的话,还可以找我,我有一堆日历控件
  • winform日历

    2008-07-08 18:25:09
    一个老外开发的控件,带源码 具体用户见项目中的小例子 采用VS2008开发 VS2005也可以用
  • WinForm控件

    千次阅读 2008-05-14 13:44:00
    WinForm控件:--------------------WinForm控件:--------------------- 不同的控件类型: ------------ 文本编辑控件类型: TextBox: ------...
  • c#Winform日历备注程序

    2016-04-11 08:44:17
    Winform日历备注程序,类似日历上每天备注当天的事件,很方便的查看每个时间段该做什么!
  • winform 公共控件

    2017-05-01 20:26:00
    margin:控件控件之间的尺寸 maxsise:控件的最大尺寸 minsize:控件的最小尺寸 enable:确定是否启用控件 visible:确定控件是否可见 name:指示代码中用来标志该对象的名称 tag:用户定义的与对象关联的数据 ...
  • winform公共控件

    2016-12-05 16:58:00
    公共控件 1、Button 按钮Enabled -- 是否启用控件(例:注册界面,我同意,才可启用)Visible -- 控件是可见的,还是隐藏的2、CheckBox -- 复选框(多个复选框,用panel框起来等同于复选框组)CheckListBox --复选框...
  • Winform基础控件美化

    千次阅读 2018-07-15 00:45:45
    这段时间重写了Winform的TextBox,ComboBox,NumericUpDown,DateTimePicker(还在实现中),Panel,Button控件 主要实现了,这些控件的垂直居中,可自定义边框颜色等功能,支持fontawesome图标. 效果见下图 ...
  • WinForm 公共控件

    2016-09-21 18:48:00
    今天,我通过计算器软件的制作,了解到了我们在进行制作程序时大体的... 之后,我学习了一下公共控件中的一些常用控件的属性。 1、Button:按钮Enabled - 是否启用Visible -是否可见2、CheckBox -复选框 CheckL...
  • 漂亮的日历控件C#源码(适用于Winform)

    热门讨论 2008-09-04 10:28:55
    漂亮的日历控件C#源码(适用于Winform),学习C#与Winform美化难得的工具

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 917
精华内容 366
关键字:

winform日历控件