□自动循环发送 [手动发送] [开始计算]
 [手动发送] [开始计算]
 [手动发送] [开始计算]
 [手动发送] [开始计算]
 [手动发送] [开始计算]
 [手动发送] [开始计算]
 [手动发送] [开始计算]如果我勾选“自动循环发送,就开始执行第一排的,手动发送(Button1),然后等待10秒,执行第一排的开始计算(Button2)然后再执行第二排的手动发送(Button5),等待10秒,执行第二排的开始计算(Button6)一直到执行完第7排的开始计算然后又返回。从第一排开始,一直循环。。去掉勾选“自动循环发送”。。此功能就取消

我问过一次了。希望能贴出贴出完整版的代码。和步骤。谢谢大侠

解决方案 »

  1.   


    用个timer10秒执行一次方法循环页面button累加就是了
      

  2.   

    搞一个Timer,设置为10秒执行一下,选中 自动循环发送 置 i = 1; 然后就开始执行
    Timer的事件代码如下:
    switch(i)
    {
       case 1:
          button1.PerformClick();
          break;
       case 2:
          .
          .
          .
       caes 7:
          btuuon7.PerformClick();
    }
    i++;
    if(i == 8) i = 1;
      

  3.   


            private void timer2_Tick(object sender, EventArgs e)
            {
                int i = 1;
                if (checkBox_AutoSend.Checked == true)
                {
                    switch(i)
            {
              case 1:
                      btn_Send.PerformClick();  //第一行手动发送
              break;
              case 2:
                      button11.PerformClick();  //第一行自动计算
                      button12.PerformClick();  //第二行手动发送
                      break;
                      case 3:
                      button10.PerformClick();  //第二行自动计算
                      button14.PerformClick();  //第三行手动发送
                      break;
                      case 4:
                      button13.PerformClick();  //第三行自动计算
                      button18.PerformClick();  //第四行手动发送
                      break;
                      case 5:
                      button17.PerformClick();  //第四行自动计算
                      button16.PerformClick();  //第五行手动发送
                      break;
                      case 6:
                      button15.PerformClick();  //第五行自动计算
                      button9.PerformClick();   //第六行手动发送
                      break;
                      case 7:
                      button6.PerformClick();  //第六行自动计算
                      button20.PerformClick(); //第七行手动发送
                      break;
                      case 8:
                      button19.PerformClick();  //第七行自动计算
                      break;
                    }
                    i++;
                    if(i == 8) i = 1;               
                }        }
    请问这样写是对的么?
      

  4.   

    1.
    其中的
    if(i == 8) i = 1;  
    最好改为
    if(i >= 8) i = 1;  
    这是良好的编码习惯,避免在干扰或程序出错的时候能够迅速纠正。2.
    if (checkBox_AutoSend.Checked == true)
    这个判断可以省略,在选中checkBox_AutoSend的时候设置timer2.Enabled=true; 禁止的时候设置为false;3.
    int i = 1;中的i应该设置为全局变量,否则每进入一次都会把i置为1,从而无法执行其他Button的运算4.
    我不知道你的初始化过程,case 1和case 8应该可以合为一个。5.
    作为良好的编码习惯,switch中应该加上default,不满足条件立即纠正。
      

  5.   

    1.
    其中的
    if(i == 8) i = 1;   
    最好改为
    if(i >= 8) i = 1;   
    这是良好的编码习惯,保证在干扰或程序出错的时候能够迅速纠正。
      

  6.   

    我刚测试了一下
                      case 8:
                      button19.PerformClick();  //第七行自动计算
                         button22.PerformClick();  //保存计算结果好像没有运行。。BUTTON22中我故意写错。然后记录成文本。。可是文本中没有记录,应该是没有执行下去
    你看看我代码。是不是需要修改
      

  7.   


                switch(DataHelper.xh)
            {
              case 1:
                      btn_Send.PerformClick();  //第一行手动发送
              break;
              case 2:
                      button11.PerformClick();  //第一行自动计算
                      button12.PerformClick();  //第二行手动发送
                      break;
                      case 3:
                      button10.PerformClick();  //第二行自动计算
                      button14.PerformClick();  //第三行手动发送
                      break;
                      case 4:
                      button13.PerformClick();  //第三行自动计算
                      button18.PerformClick();  //第四行手动发送
                      break;
                      case 5:
                      button17.PerformClick();  //第四行自动计算
                      button16.PerformClick();  //第五行手动发送
                      break;
                      case 6:
                      button15.PerformClick();  //第五行自动计算
                      button9.PerformClick();   //第六行手动发送
                      break;
                      case 7:
                      button6.PerformClick();   //第六行自动计算
                      button20.PerformClick();  //第七行手动发送    
                      break;
    //到case8这里就没执行下去了错误日志没有记录了
                      case 8:
                      button19.PerformClick();  //第七行自动计算
                      button22.PerformClick();  //计算结果写入数据库
                      break;
                  }
                  DataHelper.xh++;
                  if (DataHelper.xh >= 8) DataHelper.xh = 1;   //到case8这里就没执行下去了错误日志没有记录了
      

  8.   

    就是按顺序执行一些列按钮,可以用控件数组,简化下上面的代码//将控件放入数组
    Button[] buttons = {this.Button1, this.Button2, ...., this.Button14};
    //记录当前按钮的索引
    int index = 0;private void timer_Tick(object sender, EventArgs e)
    {
      buttons[index].PerformClick();
      index++;
      if (index == buttons.Length) index = 0;
    }
    这里,当timer第二次或者第二次以后激活时,将继续上一次所执行到的按钮。
    若需要重新从第一个开始,则在取消timer激活的时候设置index = 0即可。
      

  9.   

    又看了下,楼主貌似后一列的button执行后不用等10秒再跳到下一行,那改为一次执行两个://将控件放入数组
    Button[] buttons = {this.Button1, this.Button2, ...., this.Button14};
    //记录当前按钮的索引
    int index = 0;private void timer_Tick(object sender, EventArgs e)
    {
      buttons[index++].PerformClick();
      buttons[index++].PerformClick();
      if (index >= buttons.Length) index = 0;
    }
      

  10.   

    修正private void timer_Tick(object sender, EventArgs e)
    {
      buttons[index++].PerformClick();
      if (index > 0 || index < buttons.Length)
        buttons[index++].PerformClick();
      
      if (index >= buttons.Length) 
        index = 0;
    }