2016-06-12 2 views
0

J'ai une application de mise en page de formulaire à onglets (VB.net) dont un formulaire particulier a une vue de données qui ouvre un enregistrement particulier dans un autre formulaire. Les formulaires sont ouverts comme suit;
Exécuter un sous-formulaire sur un autre formulaire multi-instance 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 

Je veux; à la fermeture du formulaire Nouveau (NewSnagWindow) pour déclencher le sous-élément RefreshDGV() sur le formulaire d'origine (MaintRecords.Frm). J'ai essayé plusieurs façons d'appeler cela: Ex: Rechercher toutes les instances de MaintRecords (le formulaire du navigateur) et tenter de le déclencher, etc, et je ne peux tout simplement pas le faire fonctionner.

La dernière tentative du NewSnagForm était:

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 

Je ne peux pas l'obtenir au feu, peu importe ce que je fais. Des idées quelqu'un? Merci.

+0

Juste partager une idée. Ajouter un module et à l'intérieur du module déclarer une variable booléenne publique. Maintenant, sur l'événement "Dispose" de "NewForm", définissez la variable booléenne comme vraie. Et dans l'événement "GotFocus" du formulaire "MainRecords", vérifiez si le booléen est "True" puis renvoyez RefreshDGV et après que le booléen soit défini sur "False". Laissez-moi savoir si cela fonctionne. – meghlashomoy

+0

Bonne idée, mais non, les formes de l'événement .GotFocus ne se déclenche pas. Je pense que c'est parce que les formes/tab comportement. Le formulaire est créé en tant qu'enfant de la page à onglet et défini sur Dock/Remplir. C'est en quelque sorte interrompre l'événement Got Focus. (parce que l'onglet a effectivement eu l'accent? Dnno). Cela me donne l'idée d'essayer de faire mettre au point les tabulations ... ou l'onglet a changé, mais je n'ai pas eu de chance avec ça jusqu'à présent. Merci. – Josh

+0

Ensuite, essayez l'événement "Activer" ou un formulaire/contrôle doit déclencher l'événement GotFocus. Vous devez juste trouver lequel. Un lien utile -> http://www.access-programmers.co.uk/forums/showthread.php?t=141926 Le contenu principal est "Lorsque vous basculez entre deux formulaires ouverts, l'événement Deactivate se produit pour le premier formulaire, et l'événement Activate se produit pour le second formulaire Si les formulaires ne contiennent aucun contrôle visible et activé, l'événement LostFocus se produit pour le premier formulaire avant l'événement Deactivate et l'événement GotFocus se produit pour le deuxième formulaire après l'événement Activate. " – meghlashomoy

Répondre

0

Essayez ceci, peut-être une solution pour vous:

' 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

Son étroite, et normalement aurait travaillé à partir de ce que je découvre maintenant, mais la façon dont j'ai fait les formulaires dans les onglets sont évidemment interrompre tous les événements de formulaires, donc ils ne tirent pas. – Josh

0

La solution que je suis venu avec est la suivante:

Les formes tabed bouleversent les événements des formes si je ne pouvais pas utiliser les ainsi, dans la forme principale (qui tient le panneau de tabulation) que j'ai;

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

Sur le formulaire MainCards (celui qui a besoin d'être rafraîchi à la fin de la 3ème forme) ...

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 

Enfin sur le formulaire de clôture (celui que je veux tirer le RefreshDGV lors de la fermeture ....

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

    Main.RefreshMaintCards = True 

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

le but du RefreshTest() est juste pour arrêter le tir sous RefreshDGV() lorsque les autres onglets sont fermés. (Il suffit de réduire les données xfer frais généraux)