Form MDI Child qui ne retourne pas à sa taille d'origine s'il est le seul ouvert
Leon_1998
Messages postés
4
Date d'inscription
Statut
Membre
Dernière intervention
-
yg_be Messages postés 23541 Date d'inscription Statut Contributeur Dernière intervention -
yg_be Messages postés 23541 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
23541
Date d'inscription
Statut
Contributeur
Dernière intervention
Ambassadeur
1 584
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.