C#中控件数组的讨论

摘要:
在习惯了使用VB之后,我在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#中控件数组的讨论》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇synplify 9.6.2下载地址以及破解方法openwrt下安装nohup下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

BUAA_2019_MATLAB基础与应用_期末复习纲要

Matlab复习提纲 一、概述 1. Matlab(Matrix Laboratory)概述 1980年,由美国的 Clever Moler 博士开发; 是一款 科学与工程计算软件; 第四代智能计算机语言。 2. 功能与特点 开放性强、可扩展性强,兼容性强,直观灵活; MATLAB提供了丰富的矩阵运算处理功能,是基于矩阵运算的处理工具; 矩阵运...

Javascript自定义数组删除方法remove()

<html xmlns="http://www.w3.org/1999/xhtml" ><head>    <title>Javascript自定义数组删除方法remove()</title>    <script type="text/javascript">         Array.pr...

一篇文章教会你创建vue项目和使用vue.js实现数据增删改查

【一、项目背景】 在管理员的一些后台页面里,数据列表中都会对这些数据进行增删改查的操作,例如管理员添加商品、修改商品价格、删除商品、查询商品,我们应该关注这些数据的操作和处理。 【二、项目目标】 主要有以下5个目标: 1、如何创建vue项目。 2、数据添加方法:获取到id和name在data上面获取,组织一个对象,把对象通过数组的相关方法,添加到当前dat...

刚才遇到了关于C#使用外部DLL函数上的char*的问题。

有个网友在群中说:“问一个问题,vc写的dll返回值为char *,c#中如何定义,我定义了string,要出错的。”有个网友建议他用unsafe,而后来他说他解决了,他的代码如下: [StructLayout(LayoutKind.Sequential,CharSet=CharSet.Ansi)]publicstructKeyBuf{[MarshalA...

javascript 中数组的创建 添加 与将数组转换成字符串 页面三种提交请求的方式

创建js数组 var array=new Array(); Java中创建数组 private String[] array=new String[3]; 两个完全不同的,js中是可变长度的 添加内容 array.push(something); java中 array[0]="abc"; 数组转字符串 array.join(",") java中 St...

读书笔记:深入理解ES6(十)

第十章 改进的数组功能   ES6标准在ES5的基础上,继续改进数组,为数组添加了很多新功能。例如:创建数组的新方法、几个实用便捷的方法及创建定型数组(Typed Array)的能力。本章一一讲解这些新特性。 第1节 创建数组   1. 传统的创建数组的方法。   在ES6以前,创建数组的方式有两种:一种是调用Array构造函数,一种是使用数组自面量语法。...