简单说说C#中控件数组是怎样的原理
VB⽤得习惯后,到C#中来觉得很奇怪,如此好的控件数组怎么不见了。众所周知,控件数组最主要的两个优点:可以循环附值;可以响应同⼀个事件。从⽽⼤⼤简化了代码。但该⽂提出的⽅法仍然不适合我的这种情况:⽐如⼀个按钮,⼀个⽂本框,界⾯上放上好⼏对(我放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":
break;
case "txtInputField":
break;
case "cmbClear":
break;
}
}
CmdClear_Click 时
int lNameLength = (sender as Button).Name.Length;
int lIndex = FVB.Val((sender as Button).Name.Substring(lNameLength - 1));
说说控
还有⼀个⽅案:在程序中即可创建,但该⽅案对界⾯设计⽐较不⽅便,不是所见即所得,代码量也⼤,所以不讨论它。总结:
原始解决⽅案:程序中创建控件数组(不是所见即所得,代码量⼤)
更好解决⽅案:程序装载中控件数组关联到实际控件(简单的代码重复)
最好解决⽅案:控件命名有规则,程序装载时遍历界⾯所有控件,⾃动关联