在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来得到相应控件.
在C# WinForm程序中创建控件数组及相应的事件处理的更多相关文章
- C# winform项目中ListView控件使用CheckBoxes属性实现单选功能
C# winform项目中ListView控件使用CheckBoxes属性实现单选功能 在做项目时需要使用ListView控件的CheckBoxes属性显示,还要在点击行时自动选中CheckBoxes ...
- C# Winform 界面中各控件随着窗口大小变化
在做一项工程中,由于不确定目标平台的分辨率,而正常使用要求铺满整个屏幕,所以界面中的各个控件必须能够适应窗口的变化. 首先想到的就是控件的百分比布局,但是再尝试写了几个控件的Location和Size ...
- C# 中对WinForm窗体中的控件快速设置TableIndex次序
点击“视图”--“Tab键顺序”,然后便可设置.
- winform 窗体中 Time 控件的用法
作用: 用于背景进程中.通过引发Timer事件,Timer控件可以有规律的隔一段时间执行一次代码.也就是,你可以根据你自己的需要,给Timer控件设置时间,Timer每隔这段时间,就执行一次代码. 属 ...
- WinForm窗体中窗口控件的生成
1:button控件的生成方式 Button button = new Button(); button.Size = new Size(80, 80); button.Location = new ...
- winform窗体中查找控件
private RichTextBox FindControl() { RichTextBox ret = null; try { ...
- Java通过复选框控件数组实现添加多个复选框控件
编写程序,通过复选框控件数组事先选择用户爱好信息的复选框,在该程序中,要求界面中的复选框数量可以根据指定复选框名称的字符串数组的长度来自动调节. 思路如下: 创建JPanel面板对象: 使用JPane ...
- Halcon的HWindowControl控件在WinForm程序中的使用介绍(重点解决图片缩放的问题)
Halcon的HWindowControl控件在WinForm程序中的使用介绍(重点解决图片缩放的问题) 2016-12-04 20:11 362人阅读 评论(4) 收藏 举报 分类: Halco ...
- .NET混合开发解决方案7 WinForm程序中通过NuGet管理器引用集成WebView2控件
系列目录 [已更新最新开发文章,点击查看详细] WebView2组件支持在WinForm.WPF.WinUI3.Win32应用程序中集成加载Web网页功能应用.本篇主要介绍如何在WinForm ...
随机推荐
- ECshop 二次开发模板教程1
本教程适用于了解 ECshop 和 ECshop模板DIY 以及它们的日常使用,在查看前阁下需要至少会使用一种编辑器(exp:Dreamweaver, editplus, emacs, vi, ee ...
- Fragment怎么实现TabHost
Fragment如何实现TabHost TabHost是一个过时的类,它的功能可以由Fragment来实现. FragmentTransaction对fragment进行添加,移除,替换,以及执行其 ...
- HDU5772 String problem 最大权闭合图+巧妙建图
题意:自己看吧(不是很好说) 分析: 网络流:最大权闭合子图. 思路如下: 首先将点分为3类 第一类:Pij 表示第i个点和第j个点组合的点,那么Pij的权值等于w[i][j]+w[j][i](表示得 ...
- 分享一个Web弹框类
using System; using System.Text; namespace Core { /// <summary> /// MessageBox 的摘要说明. /// < ...
- JQuery插件的学习
此前一直想就关于Jquery插件的开发,做一个深入的学习,由于各种原因,当然主要是自己太懒了...今天就系统分析一下Jquery插件的开发(参考了http://www.xprogrammer.com/ ...
- bzoj 1009 [HNOI2008]GT考试(DP+KMP+矩阵乘法)
[题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=1009 [题意] 给定一个字符串T,问长度为n且不包含串T的字符串有多少种. [思路] ...
- Java-note-字符串转换为基本值
Integer.parseInt() and Double.parse.double() 例: Integer.parseInt("123") 得到常量123
- C++ 我想这样用(六)
嗯,上一篇已经介绍了面向过程编程的语法知识,接下来是最后的也是最重要的一个部分: 第三部分:基于对象的编程风格 1.构造函数的两种写法 比如我们有如下的类定义: class Circle { publ ...
- Spring Framework 中启动 Redis 事务操作
背景: 项目中遇到有一系列对Redis的操作,并需要保持事务处理. 环境: Spring version 4.1.8.RELEASE Redis Server 2.6.12 (64位) spring- ...
- Chapter 2 创建一个应用
App Engine开发模式如下一般简单<1.The App Engine development model is as simple as it gets:>: 1.创建这个应用 2. ...