Un truc bien casse pied avec VB :
Vous avez une application ; dans une fenêtre vous affichez une autre fenêtre avec .ShowDialog
Dans certains cas après que l'utilisateur (ou votre code) ait fermé la fenêtre ouverte avec .ShowDialog, votre fenêtre de départ ne retrouve pas le focus. Pire elle peut être masquée par d'autres applications ouvertes !
Solution : ajouter Me.BringToFront() après l'appel de .ShowDialog :
Code de la sub de centrage :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 CentrerFenetre(Me, FrmDiag) FrmDiag.ShowDialog() Me.BringToFront()
Parfois, cette manipulation ne fonctionne pas, notamment dans le cas suivant :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14 Public Sub CentrerFenetre(FenetreActuelle As Form, FenetreAOuvrir As Form) 'ATTENTION 'Pour que ça fonctionne il faut que dans les propriétées de la fenête, StartPosition soit réglé sur Manual If FenetreAOuvrir.Width <= FenetreActuelle.Width Then FenetreAOuvrir.Left = CInt(FenetreActuelle.Left + (FenetreActuelle.Width - FenetreAOuvrir.Width) * 0.5) Else FenetreAOuvrir.Left = FenetreActuelle.Left End If If FenetreAOuvrir.Height <= FenetreActuelle.Height Then FenetreAOuvrir.Top = CInt(FenetreActuelle.Top + (FenetreActuelle.Height - FenetreAOuvrir.Height) * 0.5) Else FenetreAOuvrir.Top = FenetreActuelle.Top End If End Sub
- depuis une fenêtre A vous affichez une fenêtre B avec .ShowDialog()
- B correspond à un traitement, avec une barre de progression
- à la fin du traitement :
- en cas d'échec du traitement on ferme B et on revient à A
- en cas de succès du traitement on ferme B, on ferme A et on ouvre la fenêtre C
Ce cas de figure se présente lorsqu'on passe d'une étape à l'autre d'un traitement de données, l'étape 'i' étant la fenêtre A, l'étape 'i+1' étant la fenêtre C, et B étant la barre de progression
La solution consiste à utiliser le code suivant :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24 'Dans le code de A : CentrerFenetre(Me, B) B.ShowDialog Me.BringToFront() 'Dans le code de B, en cas de succès (on "passe" de A à C) : Me.Hide() Call TransmettrePositionFenetre(A, C) 'Pour afficher C au même endroit que A C.Show() A.Hide() 'Dans le code de C, utiliser lévénement Shown : Private Sub C_Shown(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Shown Me.BringToFront() Me.Focus() End Sub 'Dans un module : Public Sub TransmettrePositionFenetre(FenetreActuelle As Form, FenetreAOuvrir As Form) 'ATTENTION 'Pour que ça fonctionne il faut que dans les propriétées de la fenêtre StartPosition soit réglé sur Manual FenetreAOuvrir.Top = FenetreActuelle.Top FenetreAOuvrir.Left = FenetreActuelle.Left End Sub
Partager