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#中控件数组的讨论的更多相关文章

  1. WPF 中获取DataGrid 模板列中控件的对像

    WPF 中获取DataGrid 模板列中控件的对像 #region 当前选定行的TextBox获得焦点 /// <summary> /// 当前选定行的TextBox获得焦点 /// &l ...

  2. Metro中控件WebView访问外部的网页显示一片空白

    Metro中控件WebView访问外部的网页显示一片空白 解决方案: ​下载安装了Initex.Software.Proxifier.v3.21.Standard.Edition.Incl.Keyma ...

  3. form表单中控件较多,加载完成后切换页面都很慢的解决方法

    form表单中控件较多,加载完成后点击都很慢,为什么?我一页面中form表单里面上百个控件(如input.select.radio.checkbox等),还有一些js脚本,加载速度还可以,都能全部显示 ...

  4. C#中控件的CheckState和Checked属性区别?

    Checked 和CheckState都是检查控件选中状态,都能判断是否选中控件. 只是Checked 通过布尔判断(true & false): CheckState 通过枚举判断. che ...

  5. duilib中控件拖拽功能的实现方法(附源码)

    转载请说明原出处,谢谢~~:http://blog.csdn.net/zhuhongshu/article/details/41144283 duilib库中原本没有显示的对控件增加拖拽的功能,而实际 ...

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

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

  7. MFC中控件的TAB顺序 ----转载

    在MFC中添加控件后,按Ctrl+d可以改变控件TAB顺序,怕自己忘了,一个神奇的东西,记下. 关于改变Tab顺序的方法有以下几种: 方法一:在动态创建控件的时候STYLE设置成为WS_CHILD|W ...

  8. WPF中控件的显示与隐藏

    1.WPF中控件的显示与隐藏的属性是 Visibility,它有3个枚举值 Visible, Hidden 和 Collapsed.其中Visible为可见,而 Hidden 和 Collapsed ...

  9. Java通过复选框控件数组实现添加多个复选框控件

    编写程序,通过复选框控件数组事先选择用户爱好信息的复选框,在该程序中,要求界面中的复选框数量可以根据指定复选框名称的字符串数组的长度来自动调节. 思路如下: 创建JPanel面板对象: 使用JPane ...

随机推荐

  1. SQLServer 2012之AlwaysOn —— 指定数据同步链路,消除网络抖动导致的提交延迟问题

    事件起因:近期有研发反应,某数据库从08切换到12环境后,不定期出现写操作提交延迟的问题: 事件分析:在排除了系统资源争用等问题后,初步分析可能由于网络抖动导致同步模式alwayson节点经常出现会话 ...

  2. [OpenCV] 2、边缘检测 canny

    >_<" 边缘检测代码:

  3. [C++] socket - 1 [简单TCP通信C\S代码]

    服务端: #include<iostream> #include<winsock2.h> #include<stdio.h> #pragma comment(lib ...

  4. [ACM_模拟] ZOJ 3713 [In 7-bit 特殊输出规则 7bits 16进制]

    Very often, especially in programming contests, we treat a sequence of non-whitespace characters as ...

  5. Web API 简单示例

    一.RESTful和Web API Representational State Transfer (REST) is a software architecture style consisting ...

  6. Java中的Set, List, Map漫谈

    在编程语言中,集合是指代表一组对象的对象.Java平台专门有一个集合框架(Collections Framework).集合框架是指表示和操作集合的统一架构,隔离了集合的操作和实现细节. 集合框架中的 ...

  7. java.nio.BufferOverflowException. Check the Eclipse log for stack trace.

    这个错误错了几次,必须做个标记 解决方法非常的简单: 最新的19版本会在你的项目下建立一个依赖包 Android Dependencies,在eclipse中右键这个文件夹,在Build Path选项 ...

  8. C#课外实践——校园二手平台(技术篇2)

    说明:一个人的进步都是点点滴滴的积累起来的.接着总结这次的课外实践. 有时候,想这样,3个Combox,当第一个ComBox选择以后,第二个ComBox会根据第一个的选择结果来显示相对应的内容.其实你 ...

  9. ios 学习常用网站

    一 ,别的blog上的内容 iPhone 4 与iPad开发基础教程 一.邮件列表: 1.cocoa-dev http://lists.apple.com/mailman/listinfo/cocoa ...

  10. iOS系统app崩溃日志手动符号化

    iOS系统app崩溃日志手动符号化步骤: 1.在桌面建立一个crash文件夹,将symbolicatecrash工具..crash文件..dSYM文件放到该文件夹中 a.如何查询symbolicate ...