我这里有这个代码用于绘制控件,我使用foreach遍历每个元素。
foreach (e.Control ctrl in Sheet1.Controls)
{
switch (ctrl.TYPE)
{
case "StaticText":
CompareControls.StaticText lbl = new CompareControls.StaticText();
page1.tabPage1.Controls.Add(lbl);
break;
case "CheckBox":
break;
}
}
我需要对Sheet2.Controls做同样的事情,我该如何避免复制粘贴?
答案 0 :(得分:0)
您应该将其提取为单独的方法(可能是静态的)
public static void MethodName (IEnumerable<Control> controls)
{
foreach (var ctrl in controls)
{
switch (ctrl.TYPE)
{
case "StaticText":
CompareControls.StaticText lbl = new CompareControls.StaticText();
page1.tabPage1.Controls.Add(lbl);
break;
case "CheckBox":
break;
}
}
}
答案 1 :(得分:0)
创建一个将控件集合作为参数的方法。类似的东西:
private void Function(IEnumerable<Control> controls)
{
foreach (e.Control ctrl in controls)
{
switch (ctrl.TYPE)
{
case "StaticText":
CompareControls.StaticText lbl = new CompareControls.StaticText();
page1.tabPage1.Controls.Add(lbl);
break;
case "CheckBox":
break;
}
}
}
然后你可以打电话给它:
Function(Sheet1.Controls);
答案 2 :(得分:0)
Sheet1,Sheet2的类型是什么。说 - 表。
private void loopThroughSheet(Sheet _sheet)
{
foreach (e.Control ctrl in _sheet.Controls)
{
switch (ctrl.TYPE)
{
case "StaticText":
CompareControls.StaticText lbl = new CompareControls.StaticText();
page1.tabPage1.Controls.Add(lbl);
break;
case "CheckBox":
break;
}
}
}
现在在您的主要代码中,只需致电loopThroughSheet(Sheet1)
和loopThroughSheet(Sheet2)
答案 3 :(得分:0)
以这种方式使用重载
foreach (e.Control ctrl in Sheet1.Controls)
{
DoOperation(ctrl)
}
然后外面
public void function DoOperation(CompareControls.StaticText ctrl){
CompareControls.StaticText lbl = new CompareControls.StaticText();
page1.tabPage1.Controls.Add(lbl);
}
public void function DoOperation(CheckBox ctrl){
}
通过这种方式,您可以管理每种类型的控件,而无需在case
中添加switch
。您只需添加DoOperation
函数