2015-03-19 88 views
0

我試圖做一個直到循環來檢查我的組合框中的重複項。它運行循環,但它永遠不會停止循環。做直到循環檢查重複不會停止循環

Dim i As Integer = 0 
    Dim flavors As Integer = flavorsComboBox.Items.Count 

    Do Until (i < flavors - 1) 
     If flavors = flavorsComboBox.Items.Count Then 
      MessageBox.Show("Flavor Already Exists!", "Error") 
     Else 
      flavorsComboBox.Items.Add(flavorsComboBox.Text) 
     End If 
    Loop 

回答

-1

你是不是重置口味的價值

試試這個:

Dim i As Integer = 0 
Dim flavors As Integer = flavorsComboBox.Items.Count 

Do Until (i < flavors - 1) 
    If flavors = flavorsComboBox.Items.Count Then 
     MessageBox.Show("Flavor Already Exists!", "Error") 
    Else 
     flavorsComboBox.Items.Add(flavorsComboBox.Text) 
     flavors = flavorsComboBox.Items.Count 
    End If 
Loop 
+0

現在,當我測試,我沒有得到任何錯誤消息。 – zalemam 2015-03-19 02:15:48

+0

這是如何解決問題的?除非_flavorsComboBox_中包含少於2個項目,否則您將收到無限循環的消息框,因爲_i_永遠不會更改,並且始終爲0. – 2015-03-19 13:49:18

0

下面是一個簡單的做,直到環

Dim i as integer = 0 
Dim flavors as Integer = 10 

do until (i > flavors -1) 
    Console.WriteLine(i.ToString()) 

    i = i +1 
loop 

輸出

0 
1 
2 
3 
4 
5 
6 
7 
8 
9 

在您的代碼:

do until (i < flavors - 1) 

若i = 0和口味是計數-1時大於count 0,進入循環的狀態。

接下來的遺漏是,您永遠不會更改循環條件變量的值,以準確評估停止循環的條件。

1

循環的條件着眼於i變量和flavors變量:

Do Until (i < flavors - 1) 

但這些變量永遠不要在循環體中的任何一點變化:

If flavors = flavorsComboBox.Items.Count Then 
     MessageBox.Show("Flavor Already Exists!", "Error") 
    Else 
     flavorsComboBox.Items.Add(flavorsComboBox.Text) 
    End If 

您需要添加代碼來更改其中一個或兩個變量。但是,這仍然是難以實現的目標。只需使用Distinct()方法:

Dim items = flavorsComboBox.Items.Distinct().ToArray() 
flavorsComboBox.Items.Clear() 
flavorsComboBox.Items.AddRange(items) 
+0

沒有想到這樣做,太棒了! – CheGueVerra 2015-03-19 02:40:04

0

試試這個:

Option Strict On 
Option Explicit On 
Option Infer Off 
Public Class Form1 
    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click 
     If AddDistinct(flavorsComboBox, "test") Then 
      MsgBox("Item did not exist, so it was added.") 
     Else 
      MsgBox("Item already existed, so it was not added.") 
     End If 
    End Sub 
    Public Function AddDistinct(cboBox As ComboBox, value As Object) As Boolean 
     If cboBox.Items.IndexOf(value) = -1 Then cboBox.Items.Add(value) : Return True 
     Return False 
    End Function 
End Class