2015-11-12 40 views
1

它基本上做的是檢查用戶輸入是否已經在ComboBox1中。如果是,提醒用戶。如果沒有,它將它添加到組合框中這個Visual Basic代碼爲什麼工作?

我沒有得到的是「For Each StringIterador In ComboBox1.Items loop」。 Item對象如何放置在String變量中?我知道字符串是對象,但是...您不能只將一個隨機對象放入一個字符串變量中,可以嗎?也字符串稍後用作Item對象後面「ComboBox1.GetItemText(StringIterador)」

Private Sub ComboBox1_KeyPress(sender As Object, e As KeyPressEventArgs) Handles ComboBox1.KeyPress 
    Dim StringIterador As String 
    If e.KeyChar = ControlChars.Cr Then 
     If ComboBox1.Text <> "" Then 
      For Each StringIterador In ComboBox1.Items 
       If ComboBox1.GetItemText(StringIterador).Equals(ComboBox1.Text) Then 
        MsgBox("ya está en la lista") 
        Exit Sub 
       Else 
        ComboBox1.Items.Add(ComboBox1.Text) 
        Exit Sub 
       End If 
      Next 
     End If 
    End If 
End Sub 
+3

將'Option Strict On'放置在文件的開頭或整個項目設置中 – Fabio

+0

@Fabio:這是一個值得+1的評論 – christutty

回答

2

爲對於Next語句(https://msdn.microsoft.com/en-us/library/5ebk1751.aspx)文檔要求「元素的數據類型必須是使得數據組的元素類型可以轉換爲它。「因此,只要每個項目都可以轉換爲字符串,此代碼就可以工作。它不會將項目對象存儲在字符串中,它將項目轉換爲字符串並存儲該項目。

我還沒有測試過這個,但我懷疑如果你存儲一個對象的項目不能被轉換爲字符串將引發運行時異常。當然,由於代碼每次添加ComboBox1.Text時,此代碼只會添加文本項,因此不會設置字符串轉換無效的情況。如果沒有指定DisplayMember屬性,則GetItemText返回的值就是該項目的ToString方法的值,否則,該方法將返回指定的成員的字符串值在項目參數中指定的對象的DisplayMember屬性。「所以,再次,它可能工作,因爲添加的對象將返回一個字符串。如果您向組合框添加了一個複雜對象,您可能會看到該對象的類型(來自內存)是ToString()的後備結果。