春风博客

春天里,百花香...

导航

<2015年12月>
293012345
6789101112
13141516171819
20212223242526
272829303112
3456789

统计

公告

MAIL: junglesong@gmail.com
MSN: junglesong_5@hotmail.com

Locations of visitors to this page

常用链接

留言簿(11)

随笔分类(224)

随笔档案(126)

个人软件下载

我的其它博客

我的邻居们

最新随笔

搜索

积分与排名

最新评论

阅读排行榜

评论排行榜

在C# WinForm程序中创建控件数组及相应的事件处理

控件数组是VB提供的一个优秀的设计解决方案,它能很方便快捷的处理大批同类控件的响应和时间处理,但不知为什么在C#中这个优秀特性没有传承下来,甚为可惜,本文将要探讨就是如何在C# WinForm程序实现它.

首先请看界面


在上面的界面中,本人想实现一个42个元素的Button数组来实现一个日历的功能,上面显示出了一部分.
其中采用了网格布局来放置这些按钮.

手工创建为全部按钮后,在窗体类中代码中定义成员变量控件数组:
private Button[] btns;

然后在构造函数中初始化:
btns = new Button[42];

btns[0] = this.button1;
btns[1] = this.button2;
......
btns[40] = this.button41;
btns[41] = this.button42;

大家不禁要问了,如果采用动态创建岂不更好.其实不然,我采用手工创建的主要原因是手工放置调整按钮的位置和大小较为方便,如果动态创建出来的话,把他们放到界面上比较麻烦,尤其是在比较复杂的布局中.

然后是为上述数组中的各个控件添加事件:
for (int i = 0; i < btns.Length;i++ )
 {
        btns[i].Click += new System.EventHandler(this.btns_Click);
}
如果是要根据下标添加不同事件也可以的,做一些分支即可.
C#的这种做法类似JavaSwing中AddActionListener做法,发挥以下我们也可用C#实现MVC.

最后定义btns_Click事件处理函数就行了:
// 按钮数组的事件处理
private void btns_Click(object sender, System.EventArgs e){
    String[] arrs = ((Button)sender).Text.Split('\n');

    String day = arrs[0];

    if (day.Length < 2)
    {
  day = "0" + day;
    }

    String date = currMonthLbl.Text + "-" + day;

    mainForm.RefreshDatePanel(date);
}

从上面可以看出,将sender用Button强制转化一下就能得到事件对应的控件,然后根据它的Text属性可以进行唯一性判断,其后再进行单独处理即可.

总结起来,在C#中创建控件数组很简单,首先在类中创建一个控件类型的数组,然后初始化它,具体初始化是动态创建还是链接到已有控件可以根据情况自行选择,然后为数组元素添加事件,最后实现事件即可,在事件实现中即可以通过转化sender来得到相应控件.


posted on 2007-08-04 08:18 sitinspring 阅读(7996) 评论(2)  编辑  收藏 所属分类: Object Orient Programming

评论

# re: 在C# WinForm程序中创建控件数组及相应的事件处理[未登录] 2009-03-29 15:50 Pony

万一Text属性的属性值有相同,应该如何处理,最好能够知道当前元素在数组中的下标  回复  更多评论   

# re: 在C# WinForm程序中创建控件数组及相应的事件处理 2015-12-16 11:52 xl

谢谢分享!你帮了我一个大忙!大赞!~~~~~~~~~~~~~~~~~
cool  回复  更多评论   


只有注册用户登录后才能发表评论。


网站导航:
 
sitinspring(http://www.blogjava.net)原创,转载请注明出处.