C#中控件数组的讨论
VB用得习惯后,到C#中来觉得很奇怪,如此好的控件数组怎么不见了。
“众所周知,控件数组最主要的两个优点:可以循环附值;可以响应同一个事件。从而大大简化了代码。
引自
http://wenku.baidu.com/view/769c436b561252d380eb6e72.html”
但该文提出的方法仍然不适合我的这种情况:比如一个按钮,一个文本框,界面上放上好几对(我放6对)
然后,希望实现的功能是点击一个按钮,对应的文本框内容显示“OK”
按钮点击:
这个用于处理代码比较少的,界面对数比较少的。
如果处理代码比较多,一般再把代码变为子程序。
但处理的事件子程序还是一样的多
把按钮的处理事件都指向同一个事件处理过程,差异就是控件,sender就是激发控件的事件?但与其对应的文本控件是谁?
一般方法是界面装载时,把实际的控件装载到控件数组中去。如果要一行行地装载
TextBox[] myTextBox = new TextBox[5];
myTextBox[0] = textBox1;
myTextBox[1] = textBox2;
myTextBox[2] = textBox3;
myTextBox[3] = textBox4;
myTextBox[4] = textBox5;
估计自己写得要发疯
改进一步:因为窗体里的控件,都被包括在Controls中,所以可以根据其控件名加以区分。定义控件名称除了最后一位(或两位)为数字索引,前面部分必须相同。这样在代码中即可分解索引。示例代码如下:
FrmCXFA_Load 时
foreach (Control oCon in this.Controls)
{
int lNameLength = oCon.Name.Length;
int lIndex = FVB.Val(oCon.Name.Substring(lNameLength - 1));
switch (oCon.Name.Substring(0, oCon.Name.Length - 1))
{
case "txtLab":
this.txtLab[lIndex] = (TextBox)oCon;
break;
case "txtInputField":
this.txtInputField[lIndex] = (TextBox)oCon;
break;
case "cmbClear":
this.cmbClear[lIndex] = (Button)oCon;
break;
}
}
CmdClear_Click 时
int lNameLength = (sender as Button).Name.Length;
int lIndex = FVB.Val((sender as Button).Name.Substring(lNameLength - 1));
this.txtLab[lIndex].Text = string.Empty;
this.txtInputField[lIndex].Text = string.Empty;
还有一个方案:在程序中即可创建,但该方案对界面设计比较不方便,不是所见即所得,代码量也大,所以不讨论它。
总结:
原始解决方案:程序中创建控件数组(不是所见即所得,代码量大)
更好解决方案:程序装载中控件数组关联到实际控件(简单的代码重复)
最好解决方案:控件命名有规则,程序装载时遍历界面所有控件,自动关联
C#中控件数组的讨论的更多相关文章
- WPF 中获取DataGrid 模板列中控件的对像
WPF 中获取DataGrid 模板列中控件的对像 #region 当前选定行的TextBox获得焦点 /// <summary> /// 当前选定行的TextBox获得焦点 /// &l ...
- Metro中控件WebView访问外部的网页显示一片空白
Metro中控件WebView访问外部的网页显示一片空白 解决方案: 下载安装了Initex.Software.Proxifier.v3.21.Standard.Edition.Incl.Keyma ...
- form表单中控件较多,加载完成后切换页面都很慢的解决方法
form表单中控件较多,加载完成后点击都很慢,为什么?我一页面中form表单里面上百个控件(如input.select.radio.checkbox等),还有一些js脚本,加载速度还可以,都能全部显示 ...
- C#中控件的CheckState和Checked属性区别?
Checked 和CheckState都是检查控件选中状态,都能判断是否选中控件. 只是Checked 通过布尔判断(true & false): CheckState 通过枚举判断. che ...
- duilib中控件拖拽功能的实现方法(附源码)
转载请说明原出处,谢谢~~:http://blog.csdn.net/zhuhongshu/article/details/41144283 duilib库中原本没有显示的对控件增加拖拽的功能,而实际 ...
- 在C# WinForm程序中创建控件数组及相应的事件处理
控件数组是VB提供的一个优秀的设计解决方案,它能很方便快捷的处理大批同类控件的响应和时间处理,但不知为什么在C#中这个优秀特性没有传承下来,甚为可惜,本文将要探讨就是如何在C# WinForm程序实现 ...
- MFC中控件的TAB顺序 ----转载
在MFC中添加控件后,按Ctrl+d可以改变控件TAB顺序,怕自己忘了,一个神奇的东西,记下. 关于改变Tab顺序的方法有以下几种: 方法一:在动态创建控件的时候STYLE设置成为WS_CHILD|W ...
- WPF中控件的显示与隐藏
1.WPF中控件的显示与隐藏的属性是 Visibility,它有3个枚举值 Visible, Hidden 和 Collapsed.其中Visible为可见,而 Hidden 和 Collapsed ...
- Java通过复选框控件数组实现添加多个复选框控件
编写程序,通过复选框控件数组事先选择用户爱好信息的复选框,在该程序中,要求界面中的复选框数量可以根据指定复选框名称的字符串数组的长度来自动调节. 思路如下: 创建JPanel面板对象: 使用JPane ...
随机推荐
- jqPlot图表插件学习之饼状图和环状图
一.准备工作 官网下载(笔者选择的是jquery.jqplot.1.0.8r1250.zip这个版本) 然后读者需要根据自己的情况新建一个项目并且按照如下的方式加载对应的js和css(因为笔者在VS2 ...
- 大熊君说说JS与设计模式之------单例模式Singleton()
一,总体概要 1,笔者浅谈 顾名思义单例模式并不难理解,是产生一个类的唯一实例,在我们实际开发中也会使用到这种模式,它属于创建模式的一种,基于JS语言本身的语法特征, 对象直接量“{}”,也可以作为单 ...
- [stm32][ucos] 1、基于ucos操作系统的LED闪烁、串口通信简单例程
* 内容简述: 本例程操作系统采用ucos2.86a版本, 建立了5个任务 任务名 优先级 ...
- [stm32] USART USART1收发功能工程
>_<!功能:PC端发送一个特定的字符:0x0d 0x0a,单片机则返回一句话,如图: >_<!知识: 1.复用功能I/O和调试配置(AFIO) 为了优化外设数目,可以把一些 ...
- HTML5 canvas globalCompositeOperation绘图类型讲解
我们总是将一个图形画在另一个之上,大多数情况下,这样是不够的.比如说,它这样受制于图形的绘制顺序.不过,我们可以利用 globalCompositeOperation 属性来改变这些做法.global ...
- [读书笔记]C#学习笔记八:StringBuilder与String详解及参数传递问题剖析
前言 上次在公司开会时有同事分享windebug的知识, 拿的是string字符串Concat拼接 然后用while(true){}死循环的Demo来讲解.其中有提及string操作大量字符串效率低下 ...
- crossplatform---Node.js Applications with VS Code
Node.js is a platform for building fast and scalable server applications using JavaScript. Node.js i ...
- iOS开发-友盟分享(3)
iOS 友盟分享 这个主要是提到如何通过友盟去自定义分享的步骤: 一.肯定要去友盟官网下载最新的SDK包,然后将SDK导入到你的工程文件夹里面去: 二.注册友盟账号,将你的APP添加到你的账号里面然后 ...
- Leetcode 345 Reverse Vowels of a String 字符串处理
题意:倒置字符串中的元音字母. 用两个下标分别指向前后两个相对的元音字母,然后交换. 注意:元音字母是aeiouAEIOU. class Solution { public: bool isVowel ...
- python星号变量
python 元组 tupletup1 = ('physics', 'chemistry', 1998, 2000)tup2 = (1, 2, 3, 4, 5)tup3 = 'a', 'b', 'c' ...