2010-04-27 86 views
0

我有一个简单的应用程序来存储地址细节并编辑它们。我已经离开VB几年了,需要在紧迫的最后期限之前重新认识我的知识。我有一个通用的小组负责显示一个表单,用户可以添加联系人详细信息(通过按下按钮添加)并编辑它们(通过按下按钮编辑)。这个子文件存储在一个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

因为你没有发布所有的代码,我给你这是我最好的猜测:

lstContact好像它势必stringIEnumerable一个s,而不是Contact小号IEnumerable

因此,当你得到它lstContact.SelectedItem()是返回string而不是Contact(并试图投stringContact时抛出一个错误)。

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

1

你做

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

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

+0

+1你得到它,而我还在打字:) – egrunin 2010-04-27 21:03:22