Ordre des fenetres [Résolu]

Messages postés
38
Date d'inscription
lundi 8 novembre 2004
Dernière intervention
10 décembre 2006
- - Dernière réponse : promethee2003
Messages postés
38
Date d'inscription
lundi 8 novembre 2004
Dernière intervention
10 décembre 2006
- 31 juil. 2006 à 15:43
J'ai un petit soucis au sujet de l'ordre des fenetres d'un de mes projet...

J'ai une feuille principales... celle peut ouvrir une feuille modal (liste de fichiers)... cette feuille modal doit pouvoir ouvrir une feuille non modal avec des infos diverse.

VB refuse l'ouverture d'une feuille non modale si une autre fenetre modale est deja ouverte.

A noter que si la feuille modale est fermer, la feuille non modale doit absolument rester ouverte, ... et que si la feuille modal est afficher en même temps que la feuille non modale, celle ci doit etre accessible...

J'avoue que j'ai beaucoup de mal à resoudre ce probléme...

Si quelqu'un peut m'aider je le remercie...
Afficher la suite 

Votre réponse

10 réponses

Meilleure réponse
Messages postés
13368
Date d'inscription
lundi 13 décembre 2004
Dernière intervention
3 février 2018
3
Merci
salut,

première form ouverte.
appel de la 2e qui ne doit pas être accessible tant qua la 2e est ouverte :

me.enabled=false
frm_secondaire_details.show

tu règles ainsi le problème de modal/non-modal.
pour le simple zorder des form, voir l'API setwindowpos

tous -> euh... vos conseils sont exemplés en dotnet? le fil n'est-il pas en VB6?....

++
PCPT   [AFCK]
<hr size="2" width="100%" />Prenez un instant pour répondre à ce sondage svp

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 96 internautes nous ont dit merci ce mois-ci

Commenter la réponse de PCPT
Messages postés
7745
Date d'inscription
mercredi 1 septembre 2004
Dernière intervention
24 septembre 2014
0
Merci
Ben déjà commence par regarder les définitions de "modal" et "non modal", tu comprendra ton problème tel que tu le pose, à peu de chance de trouver une solution.

Sevyc64  (alias Casy)<hr align="center" size="2" width="100%" /><stron></stron># LE PARTAGE EST NOTRE FORCE #
Commenter la réponse de cs_casy
Messages postés
38
Date d'inscription
lundi 8 novembre 2004
Dernière intervention
10 décembre 2006
0
Merci
je sais,... mais il doit bien y en avoir une de solution...
Commenter la réponse de promethee2003
Messages postés
710
Date d'inscription
lundi 10 janvier 2005
Dernière intervention
27 août 2014
0
Merci
Salut j'ai un peu de mal a comprendre exactement ton pb ,
mais je peux te donner pas mal d'astuces qui devraient t'aiaider a le resoudre ..

tu as 2 sortes de forms
- les non-modales : ouvertes grace a showdialog (la premiere form chargée dune application windows form est non -modale, si tu fermes cette premiere form automatiquement cela fermera l'application)
un formulaire non-modal doit obligatoirement etre fermé pour avoir acces aux autres forms en cours de l'application
- les modales : ouvertes par show() , on peut facilement passer d'une form a une autre

on peut avoir quelques informations sur la collection de forms ouvertes grage a


My.Application.OpenForms
par exemple :
le nombre de forms ouverte  > My.Application.OpenForms.count
avoir acces a une form en partculier > My
.Application.OpenForms(i)
ainsi tu peux faire des tests de ce style  pour voir si la form est la premiere chargée du projet>  If

Me
Is
My.Application.OpenForms(0)
Then ...

tu peux egalement faire en sorte quune form modale soit toujours affichée au-dessus dune autre formtout en ayant acces aux deux forms


Dim frmrecherche As FRechercher
frmrecherche =
New FRechercher


frmrecherche.Owner = Me
frmrecherche.TopLevel =
True
Form_Frecherche.m_Forms_recherche_crees += 1
frmrecherche.Show()

et tu peux mm faire des tests de ce style



For
i = 0

To



My
.Application.OpenForms.Count - 1


If



Me



Is



My
.Application.OpenForms(i)

Then



occurence_recherche._mfenetre_demande = i







End



If

Next

a la rigueur au lieu de fermer une form si elle est non-modale , tu la cache (Hide()) en ayant prealablement effectuer les operations comme si elle ete vraiment fermée

tu peux également definir des classes Forms contenant des membres partagés (shared) qui permettent de créer les forms au fur et a mesure et qui gere la fin de l'application

voila ++
Commenter la réponse de romagny13
Messages postés
7745
Date d'inscription
mercredi 1 septembre 2004
Dernière intervention
24 septembre 2014
0
Merci
Dsl de te contredire romagny mais tu as inversé modal et non-modal sur ce coup.

La définition que tu donne pour modal est en fait celle de non-modal et réciproquement.

Sevyc64  (alias Casy)<hr align="center" size="2" width="100%" /><stron></stron># LE PARTAGE EST NOTRE FORCE #
Commenter la réponse de cs_casy
Messages postés
38
Date d'inscription
lundi 8 novembre 2004
Dernière intervention
10 décembre 2006
0
Merci
je suis d'accord,... sauf qu'effectivement tu as un peut inversé les deux...
Mais cela ne regle pas mon probléme.

je vais essayé de le reexpliqué.

J'ai une form princiale qui contient un listview, lorsqu'on choisi un element on peut ouvrir une form secondaire qui contient des details.

cette deuxieme form s'ouvre en modal pour qu'on ne puisse pas touché à la form principale tant que la deuxieme est affiché.

jusque la tout fonctionne parfaitement. Cependant la form secondaire permet d'ouvrir une troisiéme form. Celle-ci doit s'affiché devant la principale et derriére la seconde. tout en restant accessible aussi bien par la form principale que par la secondaire. lorsque l'on ferme la form secondaire la troisieme ne doit pas être fermé. En fait la troisieme form doit etre autonome.

c'est assez compliqué je vous l'accorde.
Commenter la réponse de promethee2003
Messages postés
710
Date d'inscription
lundi 10 janvier 2005
Dernière intervention
27 août 2014
0
Merci
oOps pardon


wai jai tendance tout le temps a confondre comme cest tellement peu parlant modal et non-modal


 


par contre tu peux essayer  ainsi mais il faut que tu oubli l'idée de faire ta form secondaire avec showdialog
ainsi tu pourras passer tres f acilement dune fenetre a autre


...
frm_secondaire_details.Owner = Me
frm_secondaire_details
.TopLevel = True
frm_secondaire_details.show

frm3.Owner = Me
frm3
.TopLevel = True
frm3.show

enfin par contre si je puis me permettre ce genre d'idee avec tout un tas de fenetres qui se chevauchent je les avait au tout debut de mes etudes, il vaut mieux trouver une autre solution avec des panels par exemple que tu cachent ou rend visible puis localisent a endroit desire ou un autre moyen
+
Commenter la réponse de romagny13
Messages postés
38
Date d'inscription
lundi 8 novembre 2004
Dernière intervention
10 décembre 2006
0
Merci
je vais reflechir a tout ca...

encore merci...
Commenter la réponse de promethee2003
Messages postés
3877
Date d'inscription
mardi 19 mars 2002
Dernière intervention
23 août 2018
0
Merci
Salut,


Tu pourrais aussi vérifier si la 2e Form (celle que tu voulais Modal)
est ouverte avec une petite fonction que tu places dans le code la Form
principale. Il ne serait donc plus nécessaire d'ouvrir en Modal. Tu
peux alors te promener de Form2 à Form3 et inverse sans problème.


Code dans Form1

Private Sub Form_Activate()

    If IsForm2Open Then Form2.Show

End Sub


Function IsForm2Open() As Boolean

    Dim Frm As Form

   

    For Each Frm In Forms

        If Frm.Name = "Form2" Then

            IsForm2Open = True

            Exit Function

        End If

    Next

End Function

MPi
Commenter la réponse de cs_MPi
Messages postés
38
Date d'inscription
lundi 8 novembre 2004
Dernière intervention
10 décembre 2006
0
Merci
je comprend pas trop ton resonement... le solution la plus simple fut effectivement de reduire le nombre de form en utilisant des frames...
Commenter la réponse de promethee2003

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.