2010-04-29 3 views
0

Я пишу простое приложение - адресную книгу. Пользователь вводит новые адреса, и они добавляются как запись в список, видимый в основной форме (frmStart). Я использую одну форму для добавления и редактирования (AddContForm). Кнопка добавления на frmStart отлично работает, однако я испытываю некоторые проблемы с кнопкой редактирования, когда я нажимаю ее и вводим новые данные, которые они добавляются в качестве новой записи, однако предыдущая запись все еще существует. Логика обрабатывается классом Contact.vb. Пожалуйста, дайте мне знать, как решить эту проблему. Вот код:VB.NET обработка данных между различными формами

Contact.vb

Public Class Contact 
    Public Contact As String 
    Public Title 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 

    Public Sub Display() 
     Dim C As New Contact 
     C.Cont = frmAddCont.txtTitle.Text 
     C.Fname = frmAddCont.txtFName.Text 
     C.Surname = frmAddCont.txtSName.Text 
     C.Address = frmAddCont.txtAddress.Text 
     frmStart.lstContact.Items.Add(C) 
    End Sub 
End Class 

Здесь frmStart.vb

Public Class frmStart 
    Public Button As String 

    Private Sub btnAdd_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnAdd.Click 
     Button = "" 
     Button = "Add" 
     frmAddCont.ShowDialog() 

    End Sub 

    Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnDel.Click 

     Button = "" 
     Button = "Del" 
     Dim DelCont As Contact 
     DelCont = Me.lstContact.SelectedItem() 


     lstContact.Items.Remove(DelCont) 

    End Sub 

    Private Sub lstContact_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles lstContact.SelectedIndexChanged 

    End Sub 

    Private Sub btnEdit_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnEdit.Click 
     Button = "" 
     Button = "Edit" 
     Dim C As Contact 

     If lstContact.SelectedItem IsNot Nothing Then 

      C = DirectCast(lstContact.SelectedItem, Contact) 
      frmAddCont.ShowDialog() 

     End If 
    End Sub 
End Class 

Здесь AddContFrm.vb

Public Class frmAddCont 
    Public Class ControlObject 
     Dim Title As String 
     Dim FName As String 
     Dim SName As String 
     Dim Address As String 
     Dim TelephoneNumber As Integer 
     Dim emailAddress As String 
     Dim Website As String 
     Dim Photograph As String 

    End Class 

    Private Sub btnConfirmAdd_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnConfirmAdd.Click 

     Dim B As String 
     B = frmStart.Button 

     Dim C As New Contact 

     C.Display() 
     Me.Hide() 
     If B = "Edit" Then 
      C = DirectCast(frmStart.lstContact.SelectedItem, Contact) 
      frmStart.lstContact.SelectedItems.Remove(C) 
     End If  

    End Sub 

    Private Sub frmAddCont_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load 

    End Sub 

End Class 

Update:

Мне действительно все равно, являются ли данные в AddForm старыми данными или новыми данными. Я не понимаю, как этот код поможет мне достичь моей цели. Я думаю, что проблема в том, что когда я нажимаю кнопку «Изменить предыдущую запись в списке», я не удаляю (что, по-моему, я указал в моем вопросе) - я попытался удалить ее (используя условие if и проверяя, какая кнопка была нажата) кажется, что по какой-то причине он не работает должным образом. Я не понимаю, как ваш код мог бы помочь мне, пожалуйста, если возможно, объясните это лучше.

ответ

0

Если вы собираетесь использовать общий экземпляр frmAddCont, он будет помнить данные каждый раз, когда вы его показываете, поэтому вам придется добавить какой-то метод Initialize, в котором вы инициализируете все элементы управления для по умолчанию вы хотите (например, пустые текстовые поля).

Однако, наоборот, было бы сделать что-то вроде:

using(dlg as new frmAddCont) 
{ 
    If(dlg.ShowDialog() = DialogResult.OK) 
    { 
     Dim C As Contact = dlg.GetNewContact() 
    } 
} 

Обратите внимание, что приведенный выше код не тестировался и просто имел в виду в качестве образца, а не точный код, который нужно.

Смежные вопросы