用.net开发windows程序,离不开控件的编写,微软的那堆控件里面,只提供了一些比较基本和典型的界面控件,对于现在五彩缤纷的软件,默认的控件集已很难满足用户的需求。既然是这样,让我们自己动手来创造自己的控件吧!
- 属性:我们做.net开发的,通常都会用鼠标在属性框里面设计控件,所以,一般你看到拼命敲键盘的,不要以为看到了代码超人,转过去看清楚点,在Q着呢!.net的设计器很好,所以不要什么都写在代码里面,最重要要做到设计器可视化!
- 我们首先建立一个WindowApplication,在建一个WindowsControlLibrary,一般控件和窗口最好分开,目的当然是为了以后的可重用性了。
- 这里我们以一个MyButton控件为例子,在WindowsControlLibrary里面建立一个叫MyButton的UserControl,上面放一个PictrueBox,再放一个Lable,如下图:
- 我们假设要做一个属性,用来设置下面文字的文本和颜色,代码如下:
[Description( " 按钮的文本显示 " )]
public string MyButtonText
{
set
{
this.label1.Text = value;
}
get
{
return this.label1.Text;
}
}
[Description( " 按钮的文本颜色 " )]
public Color MyButtonTextColor
{
set
{
this.label1.ForeColor = value;
}
get
{
return this.label1.ForeColor;
}
}
- 事件:事件是C#一个很重要的概念,因为他是完全面向对象的开发语言,所以在需要对象之间的调用和回调的各种方式,而事件就是最常见的回调机制了。下面,我们为这个控件写一个例子MouseOver的事件,当鼠标放在该控件时发生。
public delegate void dMouseOver(System.DateTime mouseOverTime);
public event dMouseOver MouseOver;
private bool MouseOverIsSend = false ;
private void MyButton_MouseEnter( object sender, EventArgs e)
{
if (MouseOver != null)
{
if (!MouseOverIsSend)
{
this.MouseOver(DateTime.Now);
this.MouseOverIsSend = true;
}
}
}
private void MyButton_MouseLeave( object sender, EventArgs e)
{
MouseOverIsSend = false;
}
把label的MouseEnter和PictureBox的MouseEnter事件都下拉,选择上面这个事件,这样,我们在设计器里面又能看到我们定义的事件罗!