2015-04-06 1 views
-1

Я пытаюсь открыть несколько экземпляров одной и той же формы на основе строк, выбранных из DataGridView. Мой текущий код работает, но ждет завершения каждой формы, прежде чем переходить к следующему. Мне нужно открыть формы в одно и то же время, но они все равно будут возвращаться к основной форме через события.VB .Net Несколько экземпляров для событий с событиями

Public Class frmARLog 
    Private WithEvents edit As frmEditARLog 
    'WithEvents: indicate that we want to receive events raised by this object 

    Sub New() 

     ' This call is required by the designer. 
     InitializeComponent() 

     ' Add any initialization after the InitializeComponent() call. 
     fill() 
    End Sub 

    Sub fill() 
     Dim AR As AltARLog = New AltARLog 

     dgvARLog.DataSource = AR.getTable 

    End Sub 

    Private Sub btnEdit_Click(sender As Object, e As EventArgs) Handles btnEdit.Click 
     Dim iRowIndex As Integer 
     For i As Integer = 0 To dgvARLog.SelectedCells.Count - 1 

      iRowIndex = dgvARLog.SelectedCells.Item(i).RowIndex 
      openEditForm(dgvARLog.Rows(iRowIndex).Cells(0).Value.ToString, iRowIndex) 
     Next 
    End Sub 

    Sub openEditForm(arid As Integer, row As Integer) 
     edit = New frmEditARLog(arid) 
     AddHandler edit.FormClosing, AddressOf ItIsClosing 
     AddHandler edit.FormClosed, AddressOf ItIsClosed 
     edit.ShowDialog(Me) 
    End Sub 

    Private Sub ItIsClosing(sender As Object, e As FormClosingEventArgs) 
     If edit.Successful Then 
      fill() 
     End If 
     RemoveHandler edit.FormClosing, AddressOf ItIsClosing 
    End Sub 

    Private Sub ItIsClosed(sender As Object, e As FormClosedEventArgs) 
     RemoveHandler edit.FormClosed, AddressOf ItIsClosed 
     edit = Nothing 
    End Sub 
End Class 

ответ

0

С помощью edit.ShowDialog(Me) вы говорите это, чтобы зафиксировать форму вызова, как вы бы с диалоговым дисплеем.

Вы хотите изменить эту строку: edit.Show(Me)

Еще одно замечание, вы допускаете только для одной ссылки на ребенка от в этом коде. Вы можете подумать, нужно ли хранить ссылку на все формы или нет.

Я бы предложил не хранить их. Зарегистрируйте свои события, а затем покажите. События по-прежнему будут срабатывать, как и ожидалось, тогда вам нужно будет использовать аргумент sender вашего события Sub, это будет дочерняя дочерняя форма.

Вставьте это как первую строку каждого из ваших обработчиков событий.

Dim frmEditARLog edit as frmEditARLog = DirectCast(sender, frmEditARLog) 
+0

Любые предложения по ресурсу для регистрации событий. – Talon06

+0

Вы регистрируете события так же, как и сейчас. –

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