Ordre des fenetres [Résolu]

promethee2003 38 Messages postés lundi 8 novembre 2004Date d'inscription 10 décembre 2006 Dernière intervention - 29 juil. 2006 à 19:51 - Dernière réponse : promethee2003 38 Messages postés lundi 8 novembre 2004Date d'inscription 10 décembre 2006 Dernière intervention
- 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 

10 réponses

Répondre au sujet
PCPT 13368 Messages postés lundi 13 décembre 2004Date d'inscription 3 février 2018 Dernière intervention - 30 juil. 2006 à 15:25
+3
Utile
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
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de PCPT
cs_casy 7745 Messages postés mercredi 1 septembre 2004Date d'inscription 24 septembre 2014 Dernière intervention - 29 juil. 2006 à 20:28
0
Utile
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
promethee2003 38 Messages postés lundi 8 novembre 2004Date d'inscription 10 décembre 2006 Dernière intervention - 29 juil. 2006 à 21:37
0
Utile
je sais,... mais il doit bien y en avoir une de solution...
Commenter la réponse de promethee2003
romagny13 710 Messages postés lundi 10 janvier 2005Date d'inscription 27 août 2014 Dernière intervention - 29 juil. 2006 à 23:45
0
Utile
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
cs_casy 7745 Messages postés mercredi 1 septembre 2004Date d'inscription 24 septembre 2014 Dernière intervention - 30 juil. 2006 à 09:31
0
Utile
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
promethee2003 38 Messages postés lundi 8 novembre 2004Date d'inscription 10 décembre 2006 Dernière intervention - 30 juil. 2006 à 10:35
0
Utile
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
romagny13 710 Messages postés lundi 10 janvier 2005Date d'inscription 27 août 2014 Dernière intervention - 30 juil. 2006 à 12:30
0
Utile
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
promethee2003 38 Messages postés lundi 8 novembre 2004Date d'inscription 10 décembre 2006 Dernière intervention - 30 juil. 2006 à 13:20
0
Utile
je vais reflechir a tout ca...

encore merci...
Commenter la réponse de promethee2003
cs_MPi 3863 Messages postés mardi 19 mars 2002Date d'inscription 13 mars 2018 Dernière intervention - 31 juil. 2006 à 11:47
0
Utile
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
promethee2003 38 Messages postés lundi 8 novembre 2004Date d'inscription 10 décembre 2006 Dernière intervention - 31 juil. 2006 à 15:43
0
Utile
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.