选中复选框时实现foreach循环的C#逻辑

时间:2010-08-04 17:41:17

标签: c# foreach

我的Windows应用程序中有一个名为“Continuous”的复选框。当用户检查并单击“处理”按钮时,应用程序将处理listBox中的所有项目。但是,如果用户未选中此框,则只会处理列表中的第一个。

在我的Process方法中,我想写一个if条件来检查checkBox并检查checkach循环,否则只执行第一项。

这是我的代码

private void btnProcess_Clicl()
{

  bool bDone = false;

  while(!bDone)
  {

    LoadList(); //This will load the list from database into listBox

    if(listBox.items.Count > 0)
    {
      ProcessList();
    }

    if(!chkBox.Checked)
      bDone = true;

  }

}

我已经在ProcessList()方法中实现了foreach循环来处理列表。无论如何,如果用户检查连续的checkBox,是否可以避免执行LoadList()方法? LoadList()将从数据库中填充listBox。

3 个答案:

答案 0 :(得分:2)

做这样的事情

if( chkBox.Checked )
    ProcessList();
else
    ProcessOne();

编写功能以执行您想要的操作

<强>更新

为避免重复处理代码,您可以执行类似

的操作
public void ProcessList()
{
    foreach( var item in list )
        ProcessOne( item );
}

答案 1 :(得分:2)

保理是你的朋友。

void ProcessList(int start, int count) {
    for (int i=start; i < start + count; i++) {
        ProcessItem(i);
    }
}

void ProcessItem(int i) { // your code here
}

private void btnProcess_Click() {
   if (IsContinuous) {
      ProcessList(0, list.Count);
   }
   else {
       ProcessItem(0);
   }
}

private bool IsContinuous { get { return chkBox.Checked; } }

这对你有用,但我不是特别喜欢它,因为我认为Process应该是列表数据结构本身的一部分而不是我的UI。模型(和视图)和控制应该是分开的(如果可能的话)。

答案 2 :(得分:1)

    Boolean doAllItems = chkBox.Checked;
    foreach(Object something in collection)
    {
        DoWork(something);
        if(!doAllItems)
            break;
    }