在C#中常常出现一些控件是Windows无法实现的或者实现起来是十分复杂的,并且这些控件的使用时十分频繁的,这个时候,我们就可以自定义控件,而且在C#中控件的编程是十分容易的。
在C#中控件编程有好几种形式,而我觉得最容易的就是复合控件编程,是综合了几个控件的控件,将其编译到一个DLL文件中,实现控件的复用。
今天我实现了一个简单的控件,就是根据一个Web中的Marquee控件,实现代码如下:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Text;
using System.Windows.Forms;
namespace Marquee
{
public partial class MarqueeTimerControl : UserControl
{
#region 属性
#region 速度
/// <summary>
/// 速度(使用毫秒数)
/// </summary>
[Category("USER"), Description("速度(使用毫秒数)")]
public int Speed
{
get
{
return this.timerMarquee.Interval;
}
set
{
this.timerMarquee.Interval = value;
}
}
#endregion
#region 滚动的文本
/// <summary>
/// 滚动的文本
/// </summary>
[Category("USER"), Description("滚动的文本")]
public string Text
{
get
{
return this.labelMarquee.Text;
}
set
{
this.labelMarquee.Text = value;
}
}
#endregion
#region 显示的字体
/// <summary>
/// 显示的字体
/// </summary>
[Category("USER"), Description("显示的字体")]
public Font font
{
get
{
return this.labelMarquee.Font;
}
set
{
this.labelMarquee.Font = value;
}
}
#endregion
#endregion
#region Constructor
/// <summary>
/// Constructor
/// </summary>
public MarqueeTimerControl()
{
InitializeComponent();
this.timerMarquee.Enabled = true;
this.labelMarquee.AutoSize = true;
this.labelMarquee.Left = this.Left + this.Width;
this.labelMarquee.Top = (this.Height - this.labelMarquee.Height) / 2;
}
#endregion
#region 时间Tick事件
/// <summary>
/// 时间Tick事件
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void timerMarquee_Tick(object sender, EventArgs e)
{
this.labelMarquee.Left = this.labelMarquee.Left - 10;
if (this.labelMarquee.Left + this.labelMarquee.Width < this.Left)
{
this.labelMarquee.Left = this.Left + this.Width;
}
}
#endregion
#region 控件大小改变
/// <summary>
/// 控件大小改变
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void MarqueeTimerControl_SizeChanged(object sender, EventArgs e)
{
this.labelMarquee.Left = this.Left + this.Width;
this.labelMarquee.Top = (this.Height - this.labelMarquee.Height) / 2;
}
#endregion
}
}
这个控件是综合了UserControl,Timer,Label的一个控件,并且设置了三个属性Font,Text,Speed。其他控件方面开发分批介绍。
在C#中控件编程有好几种形式,而我觉得最容易的就是复合控件编程,是综合了几个控件的控件,将其编译到一个DLL文件中,实现控件的复用。
今天我实现了一个简单的控件,就是根据一个Web中的Marquee控件,实现代码如下:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Text;
using System.Windows.Forms;
namespace Marquee
{
public partial class MarqueeTimerControl : UserControl
{
#region 属性
#region 速度
/// <summary>
/// 速度(使用毫秒数)
/// </summary>
[Category("USER"), Description("速度(使用毫秒数)")]
public int Speed
{
get
{
return this.timerMarquee.Interval;
}
set
{
this.timerMarquee.Interval = value;
}
}
#endregion
#region 滚动的文本
/// <summary>
/// 滚动的文本
/// </summary>
[Category("USER"), Description("滚动的文本")]
public string Text
{
get
{
return this.labelMarquee.Text;
}
set
{
this.labelMarquee.Text = value;
}
}
#endregion
#region 显示的字体
/// <summary>
/// 显示的字体
/// </summary>
[Category("USER"), Description("显示的字体")]
public Font font
{
get
{
return this.labelMarquee.Font;
}
set
{
this.labelMarquee.Font = value;
}
}
#endregion
#endregion
#region Constructor
/// <summary>
/// Constructor
/// </summary>
public MarqueeTimerControl()
{
InitializeComponent();
this.timerMarquee.Enabled = true;
this.labelMarquee.AutoSize = true;
this.labelMarquee.Left = this.Left + this.Width;
this.labelMarquee.Top = (this.Height - this.labelMarquee.Height) / 2;
}
#endregion
#region 时间Tick事件
/// <summary>
/// 时间Tick事件
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void timerMarquee_Tick(object sender, EventArgs e)
{
this.labelMarquee.Left = this.labelMarquee.Left - 10;
if (this.labelMarquee.Left + this.labelMarquee.Width < this.Left)
{
this.labelMarquee.Left = this.Left + this.Width;
}
}
#endregion
#region 控件大小改变
/// <summary>
/// 控件大小改变
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void MarqueeTimerControl_SizeChanged(object sender, EventArgs e)
{
this.labelMarquee.Left = this.Left + this.Width;
this.labelMarquee.Top = (this.Height - this.labelMarquee.Height) / 2;
}
#endregion
}
}
这个控件是综合了UserControl,Timer,Label的一个控件,并且设置了三个属性Font,Text,Speed。其他控件方面开发分批介绍。