现在有3个窗体,a,b,c,分别为3个类,每个有自己的传入参数,输出参数。如果一直点"确定",这三个窗体出现的顺序是a=> b=> c. 
如果其中一个窗体没有点"确定",而是点了"取消",那返回上一个窗体. 
我现在不希望把这个逻辑分别先在各个窗体里,而单独写一个逻辑类处理这个逻辑 
大概是 
    while(true){ 
            窗体A   a   =   new   窗体A(); 
            DialogResult   resA   =   a.showDialog(); 
            if(resA   =   DialogResult.OK){ 
                      while(true){ 
                                窗体B   b   =   new   窗体B(); 
                                DialogResult   resB   =   b.showDialog(); 
                                if(resB   =   DialogResult.OK){ 
                                              while(true){ 
                                                    窗体C   c   =   new   窗体C(); 
                                                    DialogResult   resC   =   c.showDialog(); 
                                                    if(resC   =   DialogResult.OK){ 
                                                                //Complete... 
                                                    } 
                                                    else   break; 
                                              } 
                                else   break; 
                      } 
            } 
            else   break; 

解决方案 »

  1.   

    首先,你的问题具体是什么?我感觉你的逻辑已经比较清晰。不过可以适当简化一下你的逻辑。
    Form[3]  steps = new Form[3];
    steps[0]=new FormA();
    steps[1]=new FormB();
    steps[2]=new FormC();
    int i =0;
    while(true)
    {
      if(i>2)break;
      DialogResult res = steps[i].showDialog();
      if(res == DialogResult.OK)
      {
        i++;
      }
    }
      

  2.   

    哦,我似乎没完全理解你的意思,似乎应当还加上i--的逻辑。Form[3]  steps = new Form[3];
    steps[0]=new FormA();
    steps[1]=new FormB();
    steps[2]=new FormC();
    int i =0;
    while(true)
    {
      if(i>2)break;  
      DialogResult res = steps[i].showDialog();
      if(res == DialogResult.OK)
      {
        i++;
      }
      else
      {
        i--;    
        if(i<0)i=0;
      }
    }
      

  3.   

    多谢phy,你的方法已经比我的有比较大的改善....请问是不是有更好的方法来追求下格式上的简洁....
    非常感谢
      

  4.   

    个人感觉就实际的逻辑部分这样写已经差不多了,如果真还要弄想想可能还有这些:
    (1)不要直接使用Form作为基类,可以自己写一个基类。提供一些比如:IsOK()函数,看上去就更直观。
    (2)可以不用数组,而使用泛型之类的更灵活。如:List<FormX>。
    (3)可以把这个函数写到一个比如:StepFormMgmt这样的类里,把遍历用的局部变量做为成员。但这个只有在步骤很多,或者这个功能可以重复用到时才有意义吧。