C#中控件数组的讨论

VB用得习惯后,到C#中来以为很奇怪,如此好的控件数组怎么不见了。
“众所周知,控件数组最主要的两个优势:能够循环附值;能够响应同一个事件。从而大大简化了代码。
引自
http://wenku.baidu.com/view/769c436b561252d380eb6e72.htmlhtml

但该文提出的方法仍然不适合个人这种状况:好比一个按钮,一个文本框,界面上放上好几对(我放6对)
而后,但愿实现的功能是点击一个按钮,对应的文本框内容显示“OK”数组

按钮点击:
这个用于处理代码比较少的,界面对数比较少的。this

若是处理代码比较多,通常再把代码变为子程序。设计

但处理的事件子程序仍是同样的多htm

把按钮的处理事件都指向同一个事件处理过程,差别就是控件,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;
  }
}get

CmdClear_Click 时
  int lNameLength = (sender as Button).Name.Length;
  int lIndex = FVB.Val((sender as Button).Name.Substring(lNameLength - 1));string

  this.txtLab[lIndex].Text = string.Empty;
  this.txtInputField[lIndex].Text = string.Empty;it

还有一个方案:在程序中便可建立,但该方案对界面设计比较不方便,不是所见即所得,代码量也大,因此不讨论它。

总结:原始解决方案:程序中建立控件数组(不是所见即所得,代码量大)更好解决方案:程序装载中控件数组关联到实际控件(简单的代码重复)最好解决方案:控件命名有规则,程序装载时遍历界面全部控件,自动关联

相关文章
相关标签/搜索