2016-06-12 26 views
0

Ich habe eine Registerkarte Formular-Layout-Anwendung (VB.net), die ein bestimmtes Formular eine Datagridview, die einen bestimmten Datensatz in einem anderen Formular öffnet. Die Formulare werden wie folgt geöffnet;
Führen Sie ein Sub auf einem anderen Multi-Instanz-Formular 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 

Ich möchte; Schließen des neuen Formulars (NewSnagWindow) zum Auslösen des RefreshDGV() Sub auf dem ursprünglichen Formular (MaintRecords.Frm). Ich habe mehrere Wege ausprobiert, dies zu nennen. ZB: Ich suche nach allen Instanzen von MaintRecords (dem Browser-Formular) und versuche, es auszulösen usw., und ich kann es einfach nicht zum Laufen bringen.

Der neueste Versuch auf der NewSnagForm war:

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 

Ich kann es einfach nicht, egal zu feuern, was ich tun. Irgendwelche Ideen irgendjemand? Danke.

+0

Teilen Sie einfach eine Idee. Fügen Sie ein Modul hinzu und deklarieren Sie innerhalb des Moduls eine öffentliche boolesche Variable. Jetzt auf "Dispose" -Ereignis von "NewForm" setzen Sie die boolesche Variable als wahr. Und im "GotFocus" -Ereignis des "MainRecords" -Formulars überprüfe, ob der boolesche Wert "True" ist, dann feuere RefreshDGV und setze danach den booleschen Wert auf "False". Lass mich wissen ob es funktioniert. – meghlashomoy

+0

Gute Idee, aber nein, das Formular .GotFocus Event wird nicht ausgelöst. Ich denke es ist, weil das Formular/Tab-Verhalten. Das Formular wird als untergeordnetes Element der Registerkarte festgelegt und zum Andocken/Füllen festgelegt. Irgendwie unterbricht das das Got Focus Event. (weil der Tab eigentlich den Fokus hat?). Es gibt mir die Idee zu versuchen, die Tabpages bekommen Fokus .... oder Tab geändert, aber iv hatte damit bisher kein Glück. Vielen Dank. – Josh

+0

Dann versuchen Sie "Activate" -Ereignis oder ein Formular/Steuerelement muss das GotFocus-Ereignis auslösen. Sie müssen nur welche finden. Ein nützlicher Link -> http://www.access-programmers.co.uk/forums/showthread.php?t=141926 Hauptinhalt ist "Wenn Sie zwischen zwei geöffneten Formularen wechseln, tritt das Deactivate-Ereignis für das erste Formular auf und Das Activate-Ereignis tritt für das zweite Formular auf. Wenn die Formulare keine sichtbaren aktivierten Steuerelemente enthalten, tritt das LostFocus-Ereignis für das erste Formular vor dem Deactivate-Ereignis und das GotFocus-Ereignis für das zweite Formular nach dem Activate-Ereignis auf. – meghlashomoy

Antwort

0

die Sie interessieren könnte eine Lösung für Sie sein:

' 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

Es ist in der Nähe, und normalerweise würde funktionieren, was ich jetzt herausfinden, aber die Art, wie ich die Formulare in Tabs gemacht habe, unterbrechen offensichtlich alle Formen Ereignisse, deshalb werden sie nicht feuern. – Josh

0

Die Lösung, die ich mit kommen haben, ist wie folgt:

Die tabed Formen, die Formen sind zu stören Ereignisse so konnte ich nicht verwenden sie so, in der Hauptform (die das Tab-Panel hält) habe ich;

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

Auf der MainCards Form (Derjenige, der am Ende der dritten Form aufgefrischt werden muss) ...

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 

und schließlich am Abschlussformular (diejenige, die ich feuern will die RefreshDGV beim Schließen ....

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

    Main.RefreshMaintCards = True 

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

der Zweck der RefreshTest() ist nur die Unter RefreshDGV() Brennen zu stoppen, wenn andere Tabs geschlossen werden. (Just reduzieren Daten xfer Gemeinkosten)