• 带复选框日期选择控件


    运行效果如下:

    实例代码如下:

    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Drawing;
    using System.Data;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using System.Windows.Forms;
    
    namespace Demo.UC
    {
        public partial class ChbDater : UserControl
        {
            /// <summary>
            /// 本次操作所选日期列表
            /// </summary>
            private List<string> dataList = new List<string>();
            public List<string> CurrentDataList
            {
                get { return this.dataList; }
                set
                {
                    dataList = value;
                }
            }
    
            public ChbDater()
            {
                InitializeComponent();
            }
    
            private void ChbDater_Load(object sender, EventArgs e)
            {
                InitYearAndMonth();
    
                InitDaysControl(DateTime.Now.Year, DateTime.Now.Month);
            }
    
            private void InitDaysControl(int year, int month)
            {
                int uDays = 0;
                if (month != 1) uDays = DateTime.DaysInMonth(year, month - 1);//当前月上一月的总天数
                DateTime oneDay = new DateTime(year, month, 1);//当前月的第一天
                int count = GetDays(oneDay.ToString("dddd"));
                //初始化上一月日期信息
                int k = count;
                for (int i = count - 1; i > 0; i--)
                {
                    k--;
                    CheckBox chb = tlpcontent.Controls.Find("checkBox" + k, true)[0] as CheckBox;
                    if (chb != null)
                    {
                        if (k != 1) uDays--;
                        chb.Text = uDays.ToString();
                        chb.Visible = true;
                        chb.Enabled = false;
                    }
                }
                //当前月日期初始化
                int days = DateTime.DaysInMonth(year, month);//当前月的总天数
                for (int i = 0; i < days; i++)
                {
                    CheckBox chb = tlpcontent.Controls.Find("checkBox" + (i + count), true)[0] as CheckBox;
                    if (chb != null)
                    {
                        //chb.Text = oneDay.AddDays(i).ToString("yyyy-MM-dd (dddd)");
                        chb.Text = oneDay.AddDays(i).ToString("dd");
                        chb.Enabled = true;
                        chb.Visible = true;
                    }
                }
                //下一月日期初始化
                DateTime downMonth = new DateTime(year, month, 1);
                if (month != 12) downMonth = new DateTime(year, month + 1, 1);//当前月的第一天
                int kk = 0;
                for (int i = (days + count); i <= 42; i++)
                {
                    CheckBox chb = tlpcontent.Controls.Find("checkBox" + i, true)[0] as CheckBox;
                    chb.Text = downMonth.AddDays(kk).ToString("dd");
                    chb.Visible = true;
                    chb.Enabled = false;
                    kk++;
                }
            }
    
            private int GetDays(string weekDay)
            {
                switch (weekDay)
                {
                    case "星期一":
                        return 1;
                    case "星期二":
                        return 2;
                    case "星期三":
                        return 3;
                    case "星期四":
                        return 4;
                    case "星期五":
                        return 5;
                    case "星期六":
                        return 6;
                    case "星期天":
                    case "星期日":
                        return 7;
                }
                return 0;
            }
    
            private void InitYearAndMonth()
            {
                List<int> years = new List<int>();
                for (int i = -5; i <= 5; i++)//前置5年,后置5年 共11年
                {
                    if (i < 0) years.Add(DateTime.Now.Year + i);
                    if (i >= 0) years.Add(DateTime.Now.Year + i);
                }
    
                this.cmbYear.DataSource = years;
                this.cmbYear.SelectedIndex = 5;
                this.cmbMonth.Text = DateTime.Now.Month.ToString();
            }
    
            private void cmbYear_SelectedIndexChanged(object sender, EventArgs e)
            {
                if (string.IsNullOrEmpty(this.cmbYear.Text)) this.cmbYear.Text = DateTime.Now.Year.ToString();
                if (string.IsNullOrEmpty(this.cmbMonth.Text)) this.cmbMonth.Text = DateTime.Now.Month.ToString();
                InitDaysControl(int.Parse(this.cmbYear.Text), int.Parse(this.cmbMonth.Text));
            }
    
            private void checkBox1_CheckedChanged(object sender, EventArgs e)
            {
                CheckBox chb = sender as CheckBox;
                if (chb.Checked)
                {
                    string month = this.cmbMonth.Text;
                    if (int.Parse(month) < 10) month = "0" + month;
                    CurrentDataList.Add(this.cmbYear.Text + "-" + month + "-" + chb.Text);
                    chb.BackColor = Color.Wheat;
                }
                else
                {
                    string month = this.cmbMonth.Text;
                    if (int.Parse(month) < 10) month = "0" + month;
                    CurrentDataList.Remove(this.cmbYear.Text + "-" + month + "-" + chb.Text);
                    chb.BackColor = SystemColors.Control;
                }
            }
    
            private void btnTest_Click(object sender, EventArgs e)
            {
                StringBuilder buf = new StringBuilder();
                foreach (string item in CurrentDataList)
                {
                    buf.Append(item);
                    buf.Append("
    ");
                }
                MessageBox.Show(buf.ToString());
            }
    
    
        }
    }
    

      

  • 相关阅读:
    关于Java中变量的意义和注意事项
    成为Android高手的十个建议
    成为Java高手的25个学习目标(经典)
    流体力学神器:Naiad 0.6 Windows版试用
    饭前念诵+感恩辞+感恩白開水
    Android 基本开发规范(必读)
    Python批量重命名Maya场景中的3D物体
    Java高新技术视频笔记:反射
    程序员编程技术迅速提高的终极攻略
    三十、有关联网问题
  • 原文地址:https://www.cnblogs.com/YYkun/p/8981030.html
Copyright © 2020-2023  润新知