begin process at 2012 02 12 05:43:45
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Visual Basic 6

 > 

Windows

 > 

Formulaire et Controls

 > 

Gestion de Form Parents et Enfants


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Gestion de Form Parents et Enfants

mercredi 2 juillet 2008 à 16:10:22 | Gestion de Form Parents et Enfants

Kepone

Salut,

je rencontre un problème avec mon appli.

mon appli est une FAQ. elle contient de nombreuses form dont une FormMDI qui contient toutes les autres.

j'ai deux types de form :
 
1- des formes contenant des listView qui m'affiche une vue de ma base de données MySql et contenant des boutons permettant l'ajout, la modification etc ...

2- des formes de saisie qui permettent d'ajouter ou de modifier des enregistrement de la bdd.

Ce que je souhaite c'est écrire une procédure gérant l'appartenance des formes à leur form parents. je m'explique.

J'ouvre grace au menu la Form1 qui m'affiche la liste des questions réponses déja saisie. lorsque je clique sur le bouton
ajouter, Form2 s'ouvre. Il faut à cette instant que form1 soit Disabled car une fenetre fille de Form1 a été ouverte.
Il faut également que lorsque je ferme Form2, Form1 soit Enabled car toutes les fenetres filles de Form1 sont fermé.

j'ai déja réaliser sur une appli une gestion des fenetres de ce genre mais c'est hyper galère. surtout que je peux avoir jusqu'a 6 niveaux de fenetre les unes au dessus des autres. du coup si l'utilisateur clique a coté de la bonne form il met en premier plan une form qui n'a rien a voir avec ce qu'il recherche et il est perdu.

je voulais en faite savoir si une propriété éxiste permettant de savoir a partir de quel form l'utilisateur a appuyer sur un bouton pour ouvrir la form actuelle. cela me permettrait simplement de mettre dans le Form Unload d'activer la Form parent.

je sais pas si je suis claire mais n'hésiter pas à poser vos questions.
mercredi 2 juillet 2008 à 20:18:29 | Re : Gestion de Form Parents et Enfants

PCPT

Administrateur CodeS-SourceS
salut,

umm.. à moitié
tu parles de 6 niveaux...
tu veux JUSTE que Form1 (la mère) soit disabled après l'ouverture d'un de ses enfants, ou que chaque fenêtre se désactive dès qu'elle en ouvre une autre (et donc se réactive quand sa "fille" se ferme) ?

parce qu'à la limite dans ce 2e cas de figure, tu n'as alors jamais vraiment 6 niveaux, si on n'a accès qu'à une fenêtre à la fois. il te suffit juste d'ouvrir les enfants par un FormX.Show VbModal

??

Prenez un instant pour répondre à ce sondage svp  
jeudi 3 juillet 2008 à 09:28:11 | Re : Gestion de Form Parents et Enfants

Kepone

Salut

merci pour ta réponse

je suis dans le deuxième cas c'est a dire que je veux que chaque fenetre se désactive dés qu'elle en ouvre une autre et donc se réactive quand sa fille se ferme.

j'ai donc testé ta solutions avec Form.Show VbModal mais cela ne fonctionne pas car ma form est une MdiChild et on me dit qu'elle ne peut pas etre affichées modalement.

je continue a chercher.

merci
jeudi 3 juillet 2008 à 12:50:46 | Re : Gestion de Form Parents et Enfants

PCPT

Administrateur CodeS-SourceS
Réponse acceptée !
salut,

bon, çà me semble pas mal
le fonctionnement est le suivant :
toutes tes forms sont ajoutées dans une collection. pas directement, on passe par une structure (FrmCollectorType)
le projet démarre non pas avec ta form MDI mais avec la procédure MAIN (menu projet > propriétés de prohet // objet de démarrage).
cette MAIN va ajouter ta MDI à la classe/collection (Cls_FrmCollector) pour qu'elle ne la désactive pas par la suite.
pourquoi? si tu désactives la mère, les filles le sont aussi

ensuite la MDImain est chargée et tu vois le principe : dès que tu vas afficher une nouvelle fenêtre fille, tu l'ajoutes d'abord.
dès qu'elle se ferme, tu la supprimes de la collection



'----------------------------------------------------
'MODULE CLASSIQUE, LE PROJET DéMARRE AVEC LA SUB MAIN
'----------------------------------------------------
'
Option Explicit
Public Frms As New Cls_FrmCollector

Sub Main()
    Set Frms.FrmMDI = MDIForm1
    MDIForm1.Show
End Sub





'-----------------------
'CLASSE FrmCollectorType
'-----------------------
'
Option Explicit

Public Parent   As Form
Public Child    As Form
Public Position As Integer





'-----------------------
'CLASSE Cls_FrmCollector
'-----------------------
'
'
Option Explicit
Public FrmMDI As Form

Dim oColl As New Collection

Public Sub AddForm(ByRef oParent As Form, ByRef oChild As Form)
    Dim oFrm As New FrmCollectorType
    Set oFrm.Parent = oParent
    Set oFrm.Child = oChild
    oFrm.Position = oColl.Count + 1

'   ajoute la form
    oColl.Add oFrm

'   désactive
    If Not (oParent Is Me.FrmMDI) Then oParent.Enabled = False

    Set oFrm = Nothing
End Sub

Public Sub RemoveForm(ByRef oChild As Form)
'   on cherche la form
    Dim As Integer
    Dim oParent As Form
    For i = To oColl.Count
        If oColl.Item(i).Child Is oChild Then
'           on a le bon
            Set oParent = oColl.Item(i).Parent
            If Not (oParent Is Me.FrmMDI) Then oParent.Enabled = True
            oColl.Remove (i)
            Exit For
        End If
    Next i

    Set oParent = Nothing
End Sub

Private Sub Class_Terminate()
    Dim As Integer
    For i = oColl.Count To Step -1
        oColl.Remove i
    Next i
    Set oColl = Nothing
    Set Me.FrmMDI = Nothing
End Sub





'-------------------
'FORM MDI PRINCIPALE
'-------------------
'
Option Explicit

Private Sub mnu_1_Click()
    Frms.AddForm Me, Form1
    Form1.Show
End Sub

Private Sub mnu_2_Click()
    Frms.AddForm Me, Form2
    Form2.Show
End Sub

Private Sub mnu_3n_Click()
    Frms.AddForm Me, Form2
    Form3.Show
End Sub

Private Sub MDIForm_Unload(Cancel As Integer)
    Set Frms = Nothing
End Sub





'-----
'FORM1
'-----
'
Option Explicit

Private Sub Command1_Click()
    Frms.AddForm Me, Form2
    Form2.Show
End Sub

Private Sub Form_Unload(Cancel As Integer)
    Frms.RemoveForm Me
End Sub





'-----
'FORM2
'-----
'
Option Explicit

Private Sub Command1_Click()
    Frms.AddForm Me, Form3
    Form3.Show
End Sub

Private Sub Form_Unload(Cancel As Integer)
    Frms.RemoveForm Me
End Sub





'-----
'FORM3
'-----
'
Option Explicit

Private Sub Form_Unload(Cancel As Integer)
    Frms.RemoveForm Me
End Sub





si tu as des questions, n'hésite pas
++

Prenez un instant pour répondre à ce sondage svp  
jeudi 3 juillet 2008 à 15:35:50 | Re : Gestion de Form Parents et Enfants

Kepone

Salut,

merci pour cette réponse ultra complète.

je vais la tester le plus vite possible te je te tiendrais au courant.

Merci Beaucoup

Kepone
jeudi 3 juillet 2008 à 18:51:38 | Re : Gestion de Form Parents et Enfants

Kepone

Sa marche niquel.

Sa fait plaisir.

Merci pour ce code très pratique

@+

Kepone

mardi 14 octobre 2008 à 16:24:15 | Re : Gestion de Form Parents et Enfants

jamesan

Bonjour PCPT,
Première remarque importante : je suis novice dans la programmation VB6, et essentiellement dans la gestion des classes et des objets.
Effectivement, ton code marche nickel.
Je cherche actuellement à faire fonctionner une interface tel que celle de VB6.
Je m'explique. J'aimerai pouvoir utiliser des formulaires tel que le formulaire "Projet" ou le formulaire "Propriétés" qui peuvent apparaitre et disparaitre à volonté en fonction de leur utilisation.
Je présume qu'il faut utiliser la propriété BorderStyle=5 (Sizable ToolWindow).
Ce que je n'arrive pas à réaliser actuellement est :
- l'accrochage sur le bord du MDIChild (ou alors du frmMain)
- la mise à dimension (soit hauteur, soit largeur
- la disparition de la bordure bleue.

Je ne demande pas que l'on m'écrive le code nécessaire, mais simplement des pistes qui me permettrait de pouvoir réaliser mon interface.

D'avance un grand merci de ta réponse, quelle qu'elle soit.
JAMESAN
mardi 14 octobre 2008 à 16:50:44 | Re : Gestion de Form Parents et Enfants

PCPT

Administrateur CodeS-SourceS
salut jamesan ,

tu auras plus de chances de trouver une solution en posant ta question dans un nouveau topic

en attendant :
interface "comme VB".....
mais j'suis pas devant ton PC, et VB a 2 interfaces, la classique (MDI en effet), et la SDI (menu Outils > Options... > étendues > [v] Environnemennt SDI)

dans le premier cas (apparemment), le principe est en fait de jouer dans un container

pour çà regarde les sources parlant de DOCK ou ANCHOR
tu peux également regarder dans mes sources ("bouton fermer at runtime" je crois), une classe qui te donnera accès à pas mal de propriétés comme la barre de titre, le bouton dans la barre des tâches, les boutons min max etc..., en cours d'execution ("at runtime")

enfin pour les placements, tes premières recherches devraient déjà t'apporter la solution, en attendant le principe est simple : calculer la taille de la form (me.top, me.left, me.width, me.height) en fonction de l'écran (screen.width, screen.height), et voir si dans cette ZONE tu es proche ou non d'une autre fenêtre (X.top, X.height, pareil..., pour X faisant partie de la collection me.Forms)

bon courage

Prenez un instant pour répondre à ce sondage svp
mardi 14 octobre 2008 à 17:22:10 | Re : Gestion de Form Parents et Enfants

jamesan

Re bonjour,
Un grand merci pour la rapidité de ta réponse. Je vais explorer les pistes que tu m'as donnée et te tiendrais au courant.
Juste une petite reamrque, si j'arrive à réaliser cette petite interface, je pourrais éventuellement la placer sur le site en faisant référence à ton code de départ. Est-ce OK ? Fais moi signe pour confirmation.
JAMESAN
mardi 14 octobre 2008 à 18:41:01 | Re : Gestion de Form Parents et Enfants

PCPT

Administrateur CodeS-SourceS
sans problème bien sûr


Cette discussion est classée dans : form, appli, gestion, form1, parents


Répondre à ce message

Sujets en rapport avec ce message

image de fond d'une form [ par oniros ] Bonjour,J'affiche une feuille munie d'une image de fond (propriété Picture)Comment faire pour que cette image soit automatiquement à la taille de lafe problème avec la gestion des fênetres ! [ par mediateur ] J'aimerai savoir comment vous gérer l'affichage de vos fênetres dans vos application vous utilisez quels événements ?!? form1.show & .hide ou load fo Gestion dynamique de form [ par fieldy8 ] Bonjour,je desirerai faire une gestion dynamique de formj'ai une form et une sous-form ma sous-form est de type tableau mais je voudrai pouvoir choisi Form en arrière plan [ par tex ] J'aimerais savoir comment faire en sorte qu'un formulaire reste en arrière plan. Je m'explique : dans mon prog je lance des appli externes mais si je Résolution OK, mais appli bloquée !!! [ par sarrasin ] J'ai trouvé le code (merci) pour changer de résolution au démarrage de mon appli. Mais à peine la résolution changée, je ne peux plus passer au form s MAPI Envoie Email multidestinataires- blocage bizarre sur la fermeture d'un form après l'envoi [ par MHz ] Bonjour,j'utilise MAPI pour envoyer à plusieurs destinataires un mail à plusieurs personnes dans mon code, jusque là tout va bien. Seulement, si je ve unload en VB.net ou comment fermer un formulaire... [ par guilloo ] Voila mon appli se lance sur form1 qui est en fait un formulaire demandant un mot de passe pour continuer, mais quand le mot de passe est bon j'aimera Gestion des messages [ par xavier77 ] Bonjours, j'ai créer une appli en VB. Cette appli est devenue assez importante : j'ai une centaine et form.... Jusqu'a present, j'utilise la fonction load et unload en VB6 [ par SLAINE ] Bonjour,je cherche a enregistrer une form contenant des cases à cocher de sorte que lorsque j'exécute l'exe je retrouve les cases cochées à la fermetu Affichage de Form en VB.NET [ par BoLyS ] Salut.J'ai une Form1 avec un bouton et un Form2 déjà crée.Je voudrai faire apparaitre mon form2 en cliquant su rle bouton du form1 et si possible fair


Nos sponsors


Sondage...

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

Photothèque

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 5,382 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales