使用VS C#无论是WinForm开发,还是WebForm 开发都会遇到一个问题:在Form布局时,会重复使用相同的一组控件。如下图中的控件
这一组控件是非常常用的,但是如果每一次布局相似的窗体时,都对这些控件进行属性设置会是一件非常没有技术含量的工作。通常这时就需要用到用户控件了。
在当前的项目上添加新建项,在弹出的对话框中选择"用户控件":
在下面的名称设置一下用户控件的名称。这里我就命名为:DataArea。在生成的用户控件设计窗体,布局控件:
编辑完成后保存,然后生成项目。
回到Form的设计器中,在工具箱第一栏中就可以找到自定义的用户控件。
如果没有的话,可以点击项目-刷新项目工具箱项
这些都比较简单,但关键是问题是,生成的用户控件默认是不会暴露子控件的属性。比如:你无法直接使用用户控件的实例来设置子控件DatePicker的value属性来设置日期值。这里有二种做法
方法一 、
在设计用户控件时,就暴露子控件的一些属性,把这些属性设计为用户控件的公用属性。这样,直接调用用户控件的这些设置好的属性就可以设置或者取得子控件的属性了,同时这样的设计还有良好的封装性
public DateTime startdate
{
get
{
return(start_dateTimePicker.Value);
}
set
{
start_dateTimePicker.Value = value;
}
}
public DateTime enddate
{
get
{
return(end_dateTimePicker.Value);
}
set
{
end_dateTimePicker.Value = value;
}
}
对于按钮事件的暴露我们这样做
public event EventHandler BtnTestClick;//定义事件
public void button_Click( object sender, EventArgs e )
{
if ( BtnTestClick != null )
{
/* TODO */
BtnTestClick( sender, e );
}
}
重新生成一下项目
这时我们会发现放在form里自定义的控件的属性多了一个事件
我们在窗口form应用程序写代码如下
DataArea UserControldate = new DataArea();
public Form1()
{
InitializeComponent();
UserControldate.startdate = DateTime.Today.AddDays( -1 );
UserControldate.enddate = DateTime.Today.AddDays( -7 );
}
private void dataArea1_BtnTestClick( object sender, EventArgs e )
{
MessageBox.Show( "开始日期" + UserControldate.startdate + "\n结束日期" + UserControldate.enddate );
}
下面是demo文件
不能设置0积分下载,大家注册一下就能有下载币,
不想注册的同学,请关注微信公众号,找到下载专区->博客附件,编号0006的下载资源,免费获得