无效的强制转换异常

时间:2010-04-27 20:42:08

标签: vb.net casting

我有一个简单的应用程序来存储地址详细信息并进行编辑。我已经离开VB几年了,需要在紧迫的截止日期前重新学习我的知识。我有一个通用的Sub负责显示一个表单,用户可以在其中添加联系人详细信息(通过按下按钮添加)并编辑它们(通过按下按钮编辑)。该子类存储在Contact类中。它应该工作的方式是有一个包含所有联系人的列表,当添加新联系人时,会显示一个新条目。如果用户想要编辑给定的条目,他或她选择它并按下编辑按钮

Public Sub Display()
    Dim C As New Contact
    C.Cont = InputBox("Enter a title for this contact.")
    C.Fname = frmAddCont.txtFName.Text
    C.Surname = frmAddCont.txtSName.Text
    C.Address = frmAddCont.txtAddress.Text
    frmStart.lstContact.Items.Add(C.Cont.ToString)
End Sub

我从负责通过

添加新联系人的表单中调用它
Dim C As New Contact
C.Display()

它工作得很好。但是,当我尝试使用编辑按钮执行类似操作时,我会收到错误 - “无法将类型为'System.String'的对象强制转换为'AddressBook.Contact'。”

Dim C As Contact
If lstContact.SelectedItem IsNot Nothing Then
    C = lstContact.SelectedItem()
    C.Display()
End If

我认为这可能是一件简单的事情,但是我无法解决这个问题,并且在短时间内我决定在这里寻求帮助。

我已经根据其他成员的建议更新了我的课程,这是最终版本(但是有一些问题)。当我点击编辑按钮时,它只显示联系人标题的输入框,实际上在列表中添加了另一个条目,其中包含名字,名字等的先前数据。

Public Class Contact 
        Public Contact As String 
        Public Fname As String 
        Public Surname As String 
        Public Address As String 
        Private myCont As String 
        Public Property Cont() 
            Get 
                Return myCont 
            End Get 
            Set(ByVal value) 
                myCont = Value 
            End Set 
        End Property 
        Public Overrides Function ToString() As String 
            Return Me.Cont 
        End Function 
        Sub NewContact() 
            FName = frmAddCont.txtFName.ToString 
            frmStart.lstContact.Items.Add(FName) 
            frmAddCont.Hide() 
        End Sub 
        Public Sub Display() 
            Dim C As New Contact 
            C.Cont = InputBox("Enter a title for this contact.") 
            C.Fname = frmAddCont.txtFName.Text 
            C.Surname = frmAddCont.txtSName.Text 
            C.Address = frmAddCont.txtAddress.Text 
            'frmStart.lstContact.Items.Add(C.Cont.ToString) 
            frmStart.lstContact.Items.Add(C)     

        End Sub 
End Class 

2 个答案:

答案 0 :(得分:1)

你正在做

frmStart.lstContact.Items.Add(C.Cont.ToString)

也就是说,您要向lstContact添加字符串。 当然 lstContact.SelectedItem()是一个字符串!

答案 1 :(得分:0)

由于你没有发布所有代码,我会给你最好的猜测:

lstContact似乎与IEnumerable string而不是IEnumerable Contact绑定。

因此,当您获得lstContact.SelectedItem()时,它会返回string而不是Contact(并在尝试将string投射为Contact时抛出错误)。

如果您可以发布将lstContact绑定到数据源的代码位,那会更有帮助。