今天在網上無意中搜索到「Vista風格日曆控制項」(http://www.cnpopsoft.com/article.asp?id=56)。下載之後發現,略有BUG,於是進行改進。無意中,製作出來帶農曆的萬年曆(周曆版)。
主要的改進在:
// 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)中,這樣更加合理。其他地方的微小改動包括字體大小等。
在此,謹向原作者致謝!感謝他的辛勤勞動!