本文将写一个简单的复合控件TimeLabel
1.打开VS2010,依次点击文件-新建-项目,如图:
选择Windows窗体控件库
在解决方案里可以修改下.cs文件名
当然也可以使用默认的
2.点击确定之后
设计窗口会出现一个150*150的容器
从工具箱里面拖一个Label控件到容器上
在拖一个Timer控件过来,将timer1的Interval属性设置为1000毫秒
PS:简单的说一下Timer控件,Timer控件也就是计时器控件,有两个重要的属性Interval和Tick事件,当Timer控件的Enable的属性设置为True时,计时器启动每经过Interval设定的时间间隔后就会执行Tick事件,直到其Enabled属性为false。
3.双击timer1控件,转至代码设计界面
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace NumTextBox
{
public partial class UserControl1 : UserControl
{
public UserControl1()
{
InitializeComponent();
this.timer1.Enabled = true;//将计时器的enabled属性设置为true使计时器一开始就处于可用状态
}
private void timer1_Tick(object sender, EventArgs e)
{
this.label1.Text = DateTime.Now.ToString();//将系统时间转换成String类型添加到label的Text属性上
}
}
}
4.F5启动调试
一个简单的复合控件就完成了
5.关闭测试容器,切换到设计界面,选中容器,将容器的Size设置为160,12
选中label1将属性设置为:
6.为了能适用不同的时间格式,可以为控件设置属性并公开。
切换到代码设计界面,修改一下代码:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace TimeLabel
{
public partial class TimeLabel : UserControl
{
public enum timeStyle //枚举
{
String,
LongDateString,
LongTimeString,
ShortDateString,
ShortTimeString,
自定义,
}
private timeStyle type;
public timeStyle Type
{
get { return type; }
set { type = value; }
}
public TimeLabel()
{
InitializeComponent();
this.timer1.Enabled = true;
}
protected void timer1_Tick(object sender, EventArgs e)
{//根据选择调整显示
switch (type)
{
case timeStyle.LongDateString:
this.label1.Text = DateTime.Now.ToLongDateString();
break;
case timeStyle.LongTimeString:
this.label1.Text = DateTime.Now.ToLongTimeString();
break;
case timeStyle.ShortDateString:
this.label1.Text = DateTime.Now.ToShortDateString();
break;
case timeStyle.ShortTimeString:
this.label1.Text = DateTime.Now.ToShortTimeString();
break;
case timeStyle.String:
this.label1.Text = DateTime.Now.ToString();
break;
default:
this.label1.Text = DateTime.Now.ToString("yyyy年MM月dd日 hh:mm:ss");
break;
}
}
}
}
重新启动调试
运行效果如下: