我有一个简单的应用程序来存储地址详细信息并进行编辑。我已经离开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
答案 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
绑定到数据源的代码位,那会更有帮助。