为什么这个Visual Basic代码有效?

时间:2015-11-12 02:31:50

标签: vb.net

它基本上做的是检查用户输入是否已经在ComboBox1中。如果是,则提醒用户。如果没有,则将其添加到组合框

我没有得到的是“For ComboBox1.Items循环中的每个StringIterador”。如何将Item对象放在String变量中?我知道字符串是对象但是...你不能只是将一个随机对象放入一个String变量中,对吗?此外,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

1 个答案:

答案 0 :(得分:2)

For Next语句(https://msdn.microsoft.com/en-us/library/5ebk1751.aspx)的文档要求&#34;元素的数据类型必须使得组元素的数据类型可以转换为它。&#34;所以只要每个项目都可以转换为字符串,这个代码就可以工作。它没有将项目对象存储在字符串中,而是将项目转换为字符串并存储它。

我还没有对此进行过测试,但我怀疑如果您将一个对象存储在无法转换为字符串的Items中,则会引发运行时异常。当然,由于代码每次添加ComboBox1.Text时此代码只会添加文本项,因此无法设置字符串转换无效的情况。

以同样的方式将GetItemText()记录为&#34;如果未指定DisplayMember属性,则GetItemText返回的值是项目的ToString方法的值。否则,该方法返回在item参数中指定的对象的DisplayMember属性中指定的成员的字符串值。&#34;因此,它可能会起作用,因为添加的对象将返回一个字符串。如果你在组合框中添加了一个复杂的对象,你可能会看到显示的对象类型(来自内存)是ToString()的后备结果。