2016-06-12 10 views
0

У меня есть приложение с макетом формы (VB.net), в котором у конкретной формы есть datagridview, которая открывает конкретную запись в другой форме. Формы открываются следующим образом:
Запуск суб в другой форме с несколькими экземплярами VB.net

public sub OpenRecord() 'Reference. Part of a bigger routine (On Orgional form) 
    Dim NewSnagWindow As New Maint_SnagCard 
    NewSnagWindow.SentFrom = Me 
    MaintraxTabFunctions.TAB_OpenNewTabedForm(Main, NewSnagWindow) 

End Sub 

Public Sub RefreshDGV() 
    'Refresh the DGV here 
End sub 

Public Shared Function TAB_OpenNewTabedForm(sender As System.Object, NewForm As Windows.Forms.Form, Optional AsTab As Boolean = True) As Form 

    If AsTab Then 
     Dim NewTab As New TabPage 
     NewForm.TopLevel = False 
     NewForm.FormBorderStyle = FormBorderStyle.None 
     NewForm.Parent = NewTab 
     NewForm.Dock = DockStyle.Fill 
     NewForm.Visible = True 
     NewTab.Text = NewForm.Text 
     NewTab.Name = NewForm.Name 
     sender.TabPlane.TabPages.Add(NewTab) 
     sender.TabPlane.SelectedTab = NewTab 
    Else 
     NewForm.Show() 
    End If 
    Return NewForm 
End Function 

Я хочу; при закрытии новой формы (NewSnagWindow), чтобы запустить refreshDGV() в исходной форме (MaintRecords.Frm). Я попробовал несколько способов вызова этого примера: поиск всех экземпляров MaintRecords (форма браузера) и попытка его запуска и т. Д., И я просто не могу заставить его работать.

Последняя попытка на NewSnagForm был:

Public SentFrom As Object '### SentForm set as 'me' on origional sender form. 

Private Sub SaveAndCloseButton_Click(sender As Object, e As EventArgs) Handles SaveAndCloseButton.Click 

'Do some Saving Data tasks and magic 

    SentFrom.RefreshDGV() 
End sub 

Я просто не могу заставить его стрелять независимо от того, что я делаю. Какие-нибудь идеи? Спасибо.

+0

Просто поделитесь идеей. Добавьте модуль и внутри модуля объявите общедоступную логическую переменную. Теперь в событии «Dispose» из «NewForm» задано значение boolean как true. А в событии «GotFocus» формы «MainRecords» проверьте, является ли логическое значение «True», затем пожар RefreshDGV и после этого установите логическое значение «False». Дайте мне знать, если это сработает. – meghlashomoy

+0

Хорошая идея, но нет, формы. Событие GotFocus не срабатывает. Я думаю, это потому, что поведение форм/вкладок. Форма сделана дочерним на странице вкладки и настроена на док-станцию ​​/ заполнение. Как-то это прерывает событие Got Focus. (потому что Tab фактически получил фокус? dunno). Это дает мне представление о том, чтобы попытаться получить вкладки с фокусом .... или вкладка изменила вас, но iv не повезло с этим до сих пор. Благодарю. – Josh

+0

Затем попробуйте событие «Активировать» или форма/элемент управления должен запустить событие GotFocus. Вам просто нужно найти, какой из них. Полезная ссылка -> http://www.access-programmers.co.uk/forums/showthread.php?t=141926 Основной контент: «Когда вы переключаетесь между двумя открытыми формами, событие Деактивация происходит для первой формы и событие Activate возникает для второй формы. Если формы не содержат видимых, активированных элементов управления, событие LostFocus возникает для первой формы перед деактивирующим событием, а событие GotFocus происходит для второй формы после события Activate. " – meghlashomoy

ответ

0

Попробуйте это, может быть решением для вас:

' Main form 
Public Class Form1 

    Public Sub RefreshDGV(sender As Object, e As EventArgs) 
     MessageBox.Show("RefreshDGV") 
    End Sub 

    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click 
     Dim f As New Form2 
     f.Show(Me) 
    End Sub 

End Class 


' Child form 
Public Class Form2 

    Private Sub Form2_Load(sender As Object, e As EventArgs) Handles MyBase.Load 
     AddHandler FormClosing, AddressOf Form1.RefreshDGV 
    End Sub 

End Class 
+0

Его закрытие и, как правило, сработало бы из того, что я сейчас выясняю, однако способ, которым я делал формы в вкладках, явно прерывает все события форм, поэтому они не стреляют. – Josh

0

Решение, которое я придумал следующим образом:

Формы tabed разрушают формы события, так что я не мог использовать их так, в основной форме (которая содержит панель вкладок) у меня есть;

Public Class Main 
    Public RefreshMaintCards as Boolean = False 
    '..... 
End Class 

На форме MainCards (тот, который должен быть обновлен на закрытии 3-го вида) ...

Public Class MaintRecords 
Private Sub MaintRecords_Load(sender As Object, e As EventArgs) Handles MyBase.Load 
    AddHandler Main.TabPlane.GotFocus, AddressOf Me.RefreshTest 
End Sub 

Private Sub RefreshTest() 
    If Main.RefreshOpReq Then 
     RefreshDGV() 
     Main.RefreshMaintCards = False 
    End If 
End Sub 

Private Sub RefreshDGV() 
    '.....Do Refresh 
End Sub 
End Class 

И наконец на форме закрытия (тот, который я хочу стрелять RefreshDGV при закрытии ....

Private Sub SaveAndCloseButton_Click(sender As Object, e As EventArgs) Handles SaveAndCloseButton.Click 

    Main.RefreshMaintCards = True 

    TabFunctions.CloseME(Me) 'Closes the tab 
End Sub 

цель RefreshTest() просто остановить суб RefreshDGV() обжиг, когда другие вкладки закрыты. (Просто уменьшить данные XFER накладных расходов)

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

  • Нет связанных вопросов^_^