Form MDI Child qui ne retourne pas à sa taille d'origine s'il est le seul ouvert
Leon_1998
Messages postés
4
Statut
Membre
-
yg_be Messages postés 24281 Date d'inscription Statut Contributeur Dernière intervention -
yg_be Messages postés 24281 Date d'inscription Statut Contributeur Dernière intervention -
Bonjour,
J'ai un formulaire principal qui est un MDIParent et plusieurs formulaires qui sont des MDIChild.
J'aimerai que lorsqu'un MDIChild est ouvert, qu'il vérifie s'il est le seul d'ouvert et donc si c'est le cas qu'il s'ouvre à sa taille d'origine.
Si plusieurs MDIChild sont ouverts alors je fais appelle à la méthode LayoutMdi pour placer les formulaires enfants de sorte à remplir le parent.
J'ai plus ou moins réussi mais au bout d'un certains nombre de formulaires ouverts/fermer ça ne fonctionne plus. Le dernier enfant encore ouvert ne reprend pas sa taille d'origine.
Voici le code du formulaire parent :
Et voici le code de l'un des enfants :
C'est pas du grand art mais c'est censé fonctionner.
Est-ce qu'il y aurait une erreur que je n'ai pas vu ? Merci.
Bien à vous, Léon.
J'ai un formulaire principal qui est un MDIParent et plusieurs formulaires qui sont des MDIChild.
J'aimerai que lorsqu'un MDIChild est ouvert, qu'il vérifie s'il est le seul d'ouvert et donc si c'est le cas qu'il s'ouvre à sa taille d'origine.
Si plusieurs MDIChild sont ouverts alors je fais appelle à la méthode LayoutMdi pour placer les formulaires enfants de sorte à remplir le parent.
J'ai plus ou moins réussi mais au bout d'un certains nombre de formulaires ouverts/fermer ça ne fonctionne plus. Le dernier enfant encore ouvert ne reprend pas sa taille d'origine.
Voici le code du formulaire parent :
Public Class FormPrincipal
' Code principal :
Public Form_Fermer As Boolean ' Déclaration d'une variable booléen publique, prendra la valeur "True" lorsqu'un formulaire est fermer.
Public Form_Ouvert As Boolean ' Déclaration d'une variable booléen publique, prendra la valeur "True" lorsqu'un formulaire est ouvert.
Public Nb_Form_Ouvert As Integer ' Déclaration d'une variable entier publique, incrémenter de 1 à chaque fois qu'un formulaire fille est actif.
Public Alone_Form As New Form
Public Alone_Form_Last_Known_Width, Alone_Form_Last_Known_Height As Integer
Private Sub FormPrincipal_Load(sender As Object, e As EventArgs) Handles MyBase.Load
Form_Fermer = False ' Le booléen Form_Fermer prend la valeur "False" puisqu'aucun formulaires filles est actifs au lancement de l'application.
Form_Ouvert = False ' Le booléen Form_Fermer prend la valeur "False" puisqu'aucun formulaires filles est actifs au lancement de l'application.
TimerCheckForAloneForm.Enabled = True ' Activation du Timer.
'Me.IsMdiContainer = True
Alone_Form.MdiParent = Me
Nb_Form_Ouvert = 0
End Sub
Public Sub Redimensionnement() ' Méthode publique qui redimensionne tous les formulaires filles actifs à l'orizontal de gauche à droite.
LayoutMdi(MdiLayout.TileVertical) ' Méthode définissant la disposition des formulaires enfants MDI (ici à la verticale).
End Sub
Private Sub TimerCheckForAloneForm_Tick(sender As Object, e As EventArgs) Handles TimerCheckForAloneForm.Tick
If Form_Fermer Or Form_Ouvert Then
If Nb_Form_Ouvert = 1 Then
Alone_Form.Size = New Size(Alone_Form_Last_Known_Width, Alone_Form_Last_Known_Height)
Else
Redimensionnement() ' Appel de la méthode Redimensionnement() pour redimensionner les formulaires filles actifs.
End If
Form_Fermer = False
Form_Ouvert = False
End If
End Sub
End Class
Et voici le code de l'un des enfants :
Public Class Form1
Dim OriginW As Integer
Dim OriginH As Integer
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
OriginW = 816
OriginH = 489
TimerCheckIfHeIsAlone.Enabled = True
FormPrincipal.Nb_Form_Ouvert += 1
FormPrincipal.Form_Ouvert = True
For Each Control In Me.Controls ' Ancrage des contrôles du formulaire au centre du formulaire
Control.Anchor = AnchorStyles.None
Next
End Sub
Private Sub Form1_Closing(sender As Object, e As CancelEventArgs) Handles Me.Closing
FormPrincipal.Nb_Form_Ouvert -= 1
FormPrincipal.Form_Fermer = True
End Sub
Private Sub TimerCheckIfHeIsAlone_Tick(sender As Object, e As EventArgs) Handles TimerCheckIfHeIsAlone.Tick
If FormPrincipal.Nb_Form_Ouvert = 1 Then
FormPrincipal.Alone_Form_Last_Known_Width = OriginW
FormPrincipal.Alone_Form_Last_Known_Height = OriginH
FormPrincipal.Alone_Form = Me
End If
End Sub
End Class
C'est pas du grand art mais c'est censé fonctionner.
Est-ce qu'il y aurait une erreur que je n'ai pas vu ? Merci.
Bien à vous, Léon.
A voir également:
- Form MDI Child qui ne retourne pas à sa taille d'origine s'il est le seul ouvert
- Comment réduire la taille d'un fichier - Guide
- Cette action ne peut pas être réalisée car le fichier est ouvert dans system - Guide
- Ecran retourne - Guide
- Reduire taille image - Guide
- Ublock origine - Télécharger - Outils pour navigateurs
3 réponses
yg_be
Messages postés
24281
Date d'inscription
Statut
Contributeur
Dernière intervention
Ambassadeur
1 586
bonjour, moi j'essaierais d'afficher FormPrincipal.Nb_Form_Ouvert dans un contrôle du formulaire principal, de façon à vérifier si la valeur est correcte.
n'est-il pas possible aussi d'afficher quelque chose dans les formulaires enfants, qui indique que le timer est actif?
n'est-il pas possible aussi d'afficher quelque chose dans les formulaires enfants, qui indique que le timer est actif?
Effectivement le problème vient de là, les variables Width et Height prennent bien les valeurs de tailles d'origine du formulaire.
Mais ce dernier garde pour taille celle de lorsqu'il était repositionné par la méthode LayoutMdi(MdiLayout.TileVertical).
Mais ce dernier garde pour taille celle de lorsqu'il était repositionné par la méthode LayoutMdi(MdiLayout.TileVertical).
je pense que tu n'as pas réfléchi à la séquence des opérations. que se passe-t'il si tu fermes un formulaire fils, et que le timer du formulaire parent déclenche avant le timer du formulaire fils?
pourquoi ne pas faire une fonction qui remplace le timer du formulaire fils, et appeler cette fonction quand un formulaire fils s'ouvre ou se ferme?
ensuite, quand tout fonctionnera, ce serai bien de supprimer le timer du formulaire parent.
pourquoi ne pas faire une fonction qui remplace le timer du formulaire fils, et appeler cette fonction quand un formulaire fils s'ouvre ou se ferme?
ensuite, quand tout fonctionnera, ce serai bien de supprimer le timer du formulaire parent.