2014-09-03 86 views
0

我在这里有这段代码,我用它来绘制控件,我使用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完全相同,我该如何避免复制粘贴?

+3

创建一个方法,可以将Sheet作为参数 – Sayse 2014-09-03 07:45:58

+0

请详细说明一下吗?我对方法不太好 – 2014-09-03 07:46:56

+0

Sheet1,Sheet2的类型是什么。将该类型作为参数传递给一个方法,并通过它循环。 – 2014-09-03 07:47:10

回答

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); 
+0

的书,所以我的变量表达为这样的一个地方:Sheet1.Controls,它是什么类型的变量? – 2014-09-03 07:51:12

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;   
      } 
    } 
} 
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)

+0

如何在方法中添加另一个整数,我需要解析和整数 – 2014-09-03 08:00:16

+0

这是如何访问工作表本身:public e.Sheet Sheet1 {get;组; },我如何解析它在loopThroughSheet方法?作为什么类型? – 2014-09-03 08:03:49

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 i在switch。您只需添加DoOperation函数的重载功能

+0

请这是我表达sheet1 public e.Sheet Sheet1 {get;组; },它是什么类型? – 2014-09-03 08:06:13

+0

@AniAni我想表单类型 – faby 2014-09-03 08:09:47