Question très bête mais il en faut

johann36 Messages postés 130 Date d'inscription dimanche 15 février 2004 Statut Membre Dernière intervention 9 mai 2017 - 1 sept. 2008 à 17:06
Kevin.Ory Messages postés 840 Date d'inscription mercredi 22 octobre 2003 Statut Membre Dernière intervention 7 janvier 2009 - 2 sept. 2008 à 11:58
Bonjour,

Je crois que je détiens la question la plus bête qu'il soit mais bon il y a un début à tout.
Je souhaiterai savoir comment connaitre l'état d'ouverture d'un formulaire ou fenêtre ?

J'ai un formulaire mère lorsque je clique sur un bouton j'affiche un 2ème formulaire mais qui lui ce coule au bas du formulaire mère.
Ce que je veux donc faire c'est que lorsque je déplace mon formulaire mère le 2ème formulaire se déplace lui aussi avec les même positons c'est à dire collé en bas du formulaire mère.

Bon je crois que j'ai donné mal à la tête à tout le monde et j'espère du moins que vous avez pu comprendre mon problème.

Merci d'avance.

Johann36

11 réponses

PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
1 sept. 2008 à 18:00
salut,

si si c'est clair, tu veux déplacer le 2e formulaire depuis le premier, mais sans test çà obligerait le chargement...

en VB6 il suffit de boucler sur la collection Forms. si elle est dedans, c'est qu'elle est chargée
je suppose que tu dois avoir un équivalent en dotnet

++
<hr size="2" width="100%" />Prenez un instant pour répondre à [infomsg_SONDAGE-POP3-POUR-CS_769706.aspx ce sondage] svp  
0
gillardg Messages postés 3275 Date d'inscription jeudi 3 avril 2008 Statut Membre Dernière intervention 14 septembre 2014 2
1 sept. 2008 à 18:34
Private





Sub

Form1_Load(


ByVal

sender


As

System.Object,


ByVal

e


As

System.EventArgs)


Handles





MyBase

.LoadForm2.Show()

Form2.Left =



Me

.LeftForm2.Top =



Me

.Top +


Me

.Height



End





Sub








Private





Sub

Form1_Move(


ByVal

sender


As





Object

,


ByVal

e


As

System.EventArgs)


Handles





Me

.Move



If

Form2.Visible


Then


Form2.Left =





Me

.LeftForm2.Top =



Me

.Top +


Me

.Height



End





If








End





Sub














Bonjour chez vous !
0
gillardg Messages postés 3275 Date d'inscription jeudi 3 avril 2008 Statut Membre Dernière intervention 14 septembre 2014 2
1 sept. 2008 à 18:37
et aussi dans Form2

Private
Sub Form2_Move(
ByVal sender
As
Object,
ByVal e
As System.EventArgs)
HandlesMe.MoveForm1.Left Me.LeftForm1.Top

Me.Top - Form1.Height

End
Sub
ben voila tu as 2 form qui sont collées une à l'autre

Bonjour chez vous !
0
PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
1 sept. 2008 à 18:47
tester ".visible" chargerait la form si elle ne l'est pas déjà, non?
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
gillardg Messages postés 3275 Date d'inscription jeudi 3 avril 2008 Statut Membre Dernière intervention 14 septembre 2014 2
1 sept. 2008 à 18:58
non PCPT pas du tout

Bonjour chez vous !
0
johann36 Messages postés 130 Date d'inscription dimanche 15 février 2004 Statut Membre Dernière intervention 9 mai 2017
1 sept. 2008 à 20:45
Bon ben je crois que vous avez répondu à mon problème.
Il ne me reste plus qu'a testé mais pour cela je suis obligé d'attendre demain.

Je vous tiendrais informé du résultat.

En tout cas merci à tous les deux.

Johann36
0
Kevin.Ory Messages postés 840 Date d'inscription mercredi 22 octobre 2003 Statut Membre Dernière intervention 7 janvier 2009 11
2 sept. 2008 à 10:52
Salut,



"tester ".visible" chargerait la form si elle ne l'est pas déjà, non?"

Il suffit qu'un contrôle soit créé, et non chargé, pour pouvoir accéder à ses propriétés. Je rappel en passant que la méthode Load d'un contrôle est appelé lorsque il est affiché pour la 1ère fois (Visible devient True)
Mais il se peut que le formulaire ne soit même pas créé, dans ce cas l'accès à Control.Visible va générer une erreur, il faut donc tester si l'objet à été créé avant de tester s'il est visible.
De plus, un contrôle déchargé n'est pas Nothing, mais est tout de même inutilisable. Il faut donc tester si le Handle du contrôle est encore valide. Pour cela, je crois qu'on peut utiliser la propriété IsHandleCreated du contrôle. Le test devient donc:

If MyForm IsNot Nothing AndAlso MyForm.IsHandleCreated AndAlso MyForm.Visible Then
    ' MyForm est affiché
End If
0
gillardg Messages postés 3275 Date d'inscription jeudi 3 avril 2008 Statut Membre Dernière intervention 14 septembre 2014 2
2 sept. 2008 à 11:20
Kevin   , je viens d'essayer et aucune erreur n'est générée avec le code que j'ai donné

Bonjour chez vous !
0
Kevin.Ory Messages postés 840 Date d'inscription mercredi 22 octobre 2003 Statut Membre Dernière intervention 7 janvier 2009 11
2 sept. 2008 à 11:35
J'ai dis:
"Mais il se peut que le formulaire ne soit même pas créé, dans ce cas
l'accès à Control.Visible va générer une erreur, il faut donc tester si
l'objet à été créé avant de tester s'il est visible."

Private form2 As Form2
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    If form2.Visible Then    (La référence d'objet n'est pas définie à une instance d'un objet.)
        MsgBox("Ne vient pas")
    End If
End Sub

Et ceci:
"De plus, un contrôle déchargé n'est pas Nothing, mais est tout de même
inutilisable. Il faut donc tester si le Handle du contrôle est encore
valide."

Private form2 As New Form2
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    form2.Close()
    If Not form2.Visible Then
        form2.Show()  (Impossible d'accéder à un objet supprimé.)
    End If
End Sub

Dans les 2 cas, mon code passe sans problème (cela m'a permis de tester l'exactitude de mes propos au sujet de IsHandleCreated)
0
gillardg Messages postés 3275 Date d'inscription jeudi 3 avril 2008 Statut Membre Dernière intervention 14 septembre 2014 2
2 sept. 2008 à 11:51
Private form2 As Form2
'si c'est pas déclaré New ça plante
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
   
If form2.Visible Then    (La référence d'objet n'est pas définie à une instance d'un objet.)


        MsgBox("Ne vient pas")
    End If
End Sub














Bonjour chez vous !
0
Kevin.Ory Messages postés 840 Date d'inscription mercredi 22 octobre 2003 Statut Membre Dernière intervention 7 janvier 2009 11
2 sept. 2008 à 11:58
Oui, c'est ce que je dis
Si le contrôle n'est pas créé, l'accès à sa propriété Visible génère une erreur.
Pourquoi créer le formulaire si il n'est pas affiché? Ce n'est pas toujours le cas, mais souvent on créé le formulaire lorsque il doit être affiché et on le détruit lorsque il n'est plus, pour ne pas inutilement utiliser des ressources....
0
Rejoignez-nous