現在的位置: 首頁 > 綜合 > 正文

GDI+帶農曆的萬年曆(周曆)之製作

2013年09月16日 ⁄ 綜合 ⁄ 共 3442字 ⁄ 字型大小 評論關閉

今天在網上無意中搜索到「Vista風格日曆控制項」(http://www.cnpopsoft.com/article.asp?id=56)。下載之後發現,略有BUG,於是進行改進。無意中,製作出來帶農曆的萬年曆(周曆版)。

運行如下圖:
C# border=

主要的改進在:
// frmDemo.cs
//#####################################################################################
//★★★★★★★           http://www.cnpopsoft.com [華普軟體]           ★★★★★★★
//★★ '華普軟體-VB、C#專業論文與源碼薈萃,敏捷開發,平台戰略,讓商業軟體靚起來!  ★★
//#####################################################################################

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;

namespace CNPOPSOFT.Controls
{
    public partial class frmDemo : Form
    {
        public frmDemo()
        {
            //InitializeComponent();
            this.Load += new System.EventHandler(this.frmDemo_Load);
        }

        private void frmDemo_Load(object sender, EventArgs e)
        {
            InitContent();
        }

         /// <summary>
        /// 設計器支持所需的方法 - 不要
        /// 使用代碼編輯器修改此方法的內容。
        /// </summary>
        private void InitContent()
        {
            this.SuspendLayout();

            int calendarX = 0;
            int calendarY = 0;
            int offsetX = -10;
            int offsetY = -10;
            int columns = 7;
            int rows = 1;

            VistaCalendar[] vistaCalendarList = new VistaCalendar[columns * rows];
            this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F);
            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
            this.BackColor = System.Drawing.Color.White;
            this.ClientSize = new System.Drawing.Size(1024, 700);

            DateTime dateTimeNow = DateTime.Now;
            int year = dateTimeNow.Year;
            int month = dateTimeNow.Month;
            int day = dateTimeNow.Day;

            int styleCount = Enum.GetNames(typeof(CNPOPSOFT.Controls.VistaCalendar.VistaCalendarStyle)).Length;

            for (int i = 0; i < vistaCalendarList.Length; i++)
            {
                vistaCalendarList[i] = new VistaCalendar();
                vistaCalendarList[i].BackColor = System.Drawing.Color.Transparent;
                vistaCalendarList[i].CurrentDate = dateTimeNow.AddDays(i);
                vistaCalendarList[i].IsUseToday = false;
                calendarX = (i % columns) * (155 + offsetX);
                calendarY = (i / columns) * (160 + offsetY);
                vistaCalendarList[i].Location = new System.Drawing.Point(calendarX, calendarY);
                vistaCalendarList[i].Name = "vistaCalendar" + (i+1).ToString();
                vistaCalendarList[i].Size = new System.Drawing.Size(155, 160);

                vistaCalendarList[i].Style = (CNPOPSOFT.Controls.VistaCalendar.VistaCalendarStyle)((i + i/columns) % styleCount);

                vistaCalendarList[i].TabIndex = i + 1;

                this.Controls.Add(vistaCalendarList[i]);
            }

            //
            // frmDemo
            //
            this.MaximizeBox = false;
            this.MinimizeBox = false;
            this.Name = "frmDemo";
            this.Text = "Vista時鐘控制項";
            this.Load += new System.EventHandler(this.frmDemo_Load);
            this.ResumeLayout(false);

        }

    }
}

VistaCalendar.cs中新增了CurrentDate和IsUseToday兩個公共屬性:
        public DateTime CurrentDate
        {
            get
            {
                return _currentDate;
            }
            set
            {
                _currentDate = value;
            }
        }

        public bool IsUseToday
        {
            get { return _isUseToday; }
            set { _isUseToday = value; }
        }

並將UpdateCurrentDateInfo();由構造函數中放到了void VistaCalendar_Paint(object sender, PaintEventArgs e)中,這樣更加合理。其他地方的微小改動包括字體大小等。

在此,謹向原作者致謝!感謝他的辛勤勞動!

【上篇】
【下篇】

抱歉!評論已關閉.