2015-04-19 54 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