2015-04-19 32 views
0

我使用vb.net下一步,我有这样的情况:继续在For ... Next循环,只有当用户点击一个按钮

我有一个按钮(Mybutton1)。

我也有一个包含FOR..NEXT环子:

..... 
for I=1 to nr1 
    {.... some instructions...} 
    if condition1 then 
     Mybutton1.enable=true 
     !!!!! at this point the loop must wait for the user to press the button !!!!! 
    end if 
Next 

在此每一步For循环,按钮成了当条件为真,在这种情况下,我想是启用这个循环停止,直到用户按下按钮。 (按钮的点击事件,在最后有一些指令,使得再次被禁用的按钮)

+0

我编辑了您的标题。请参阅:“[应该在其标题中包含”标签“](http://meta.stackexchange.com/questions/19190/)”,其中的共识是“不,他们不应该”。 –

+2

当满足条件时,不要在每一步都跳出for循环,为什么不使用do或while循环? – Tim

+0

但我想要的是循环在条件为真时停止,并在用户按下按钮时继续下一步。我如何使用While循环来做到这一点? – alex

回答

0

Exit For将爆发的for循环

..... 
For I=1 To nr1 
    {.... some instructions...} 
    If condition1 Then 
     Mybutton1.enable=true 
     Exit For 
    End If 
Next 
+0

好的,但是如果我走出for循环,当用户按下按钮时我怎么能再次进入? – alex

+0

被误解,更新了我的答案。 – Ceres

+0

其实我想到的解决方案不起作用,所以我删除它。我以为你可以使用AutoResetEvent,但由于表单运行时使用单个线程,它会阻止并冻结整个表单,而不是我想要的。 – Ceres

0

如果您希望能够后恢复循环用户单击该按钮,可以通过将其声明为类级别字段来保存循环变量的当前值(代码中的I)。下面的代码在用户单击Button1时启动循环。只要someCondition评估为True,它就会退出。每次用户单击Button1时,循环都会从停止的位置继续。如果用户在循环完成后单击Button1,则会显示错误消息。

Public Class Form1 
    Private number As Integer = 0 
    Private lastNumber As Integer = 4 

    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click 
     If number >= lastNumber Then 
      MessageBox.Show("Finished") 
     End If 
     Do While number < lastNumber 
      number += 1 
      Dim somecondition As Boolean 
      'code that sets someCondition 
      If somecondition Then Exit Sub 
     Loop 
    End Sub 
End Class 
+0

对不起,但for .. next循环不应该在按钮内部; s点击事件。此循环位于另一个子内部,并且该按钮的click事件包含其他代码,该代码不仅在for循环中执行,而且在用户单击该按钮时也会在其他场合执行。 – alex

+0

我只是尽量简单的代码。您可以将代码移到单独的Sub中。只需保持相同的逻辑:循环变量在表单级别声明,当条件满足时Sub退出,当您想恢复处理时再次调用Sub。 – Blackwood

+0

我无法调用按钮内部的子按钮;因为按钮的单击事件用于与循环无关的其他情况。 – alex