在C# WinForm程序中创建控件数组及相应的事件处理
来源:互联网 发布:unity3d 2d寻路 编辑:程序博客网 时间:2024/05/22 10:39
控件数组是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来得到相应控件.
- 在C# WinForm程序中创建控件数组及相应的事件处理
- C#中动态创建控件及事件处理程序
- C#中动态创建控件及事件处理程序
- C#中动态创建控件及事件处理程序
- 在C#程序中创建控件数组
- C#中动态创建控件及事件处理程序、置于顶层
- C# WinForm 控件在窗体中动态居中 创建、删除控件及对其赋值
- c# winform程序在WebBrowser控件中执行javascript脚本
- 关于在c#中创建用户控件后,winform应用程序在调用中无法通过点击用户控件的子控件为其自动添加事件代码的问题
- c#自定义控件中事件的处理
- 动态创建控件及控件的事件处理
- 在控件的创建中触发事件
- C# winform 程序中响应键盘事件
- C# winform程序中导入excel的一些处理
- C# WinForm程序中不在任务栏显示的处理方法
- C# WinForm程序中使用Unity3D控件
- C# WinForm程序中使用Unity3D控件
- c# 自定义控件的事件处理函数如何创建
- Delphi多线程处理(转载)
- Buffalo 1 Minute Tutorial
- dorado培训笔记
- 有关接口和抽象类
- javascript:以前写的xmlhttp池,代码
- 在C# WinForm程序中创建控件数组及相应的事件处理
- CellDesigner插件开发中的layout困境
- VC7.1的一个奇怪的bug
- 通用管理信息协议(ISO CMIP & CMIS)
- signal(SIGUSR1, SIG_IGN) 的意思
- 轻松切换IP及IE代理设置
- C#命令行(CSC.EXE) 编译器选项(Framework 1.1)
- asp.net2.0常用基本函数大全(更新中)
- 在Java中应用设计模式--Singleton