WinForm窗体控件库和日历算法
先来看看效果图
图中展现的是一个日历自定义控件,其显示格里高利历、农历及节气。
控件制作
- 创建一个窗体控件库项目,新建两个控件:PanelDay和PanelMonth;
- PanelDay的组成为三个Label控件,分别填写格里历、农历和节气。
控件代码如下:
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 =