OVH Cloud OVH Cloud

Detecter si j'ai lancer une instance d'une feuille

4 réponses
Avatar
Matteo
Bonjour,

Je suis debutant en dotnet et je fais un prog qui doit permettre a
utilisateur de travailler sur deux feuille simultanément.
Donc je lance ma premiere feuille et j'ai un bouton qui ouvre une deuxieme
feuille.
Mais je ne veux pas que l'utilisateur clique plusieur fois sur ce bouton et
ouvrir ainsi plusieur feuille.
Est il possible de detecter si la feuille est deja ouverte ?

PS: je ne veux pas ouvrir ma deuxieme feuille dans avec la methode
Showdialog car l'utilisateur doit pouvoir acceder au 2 feuilles.


Merci.

4 réponses

Avatar
Zoury
Salut Matteo ! :O)

Voici une solution simple :

Dans ton formulaire *appelé* (celui qui ne peut être ouvert plus d'une
fois), ajoute un compteur (propriété Shared) que tu incrémentes via les
fonctions Show() et ShowDialog() et décrémente via Close() (avec le mot clé
Shadows).
'***
Option Explicit On

Public Class Form2
Inherits System.Windows.Forms.Form

Private Shared m_nCount As Int32

' Le Code généré par le Concepteur Windows Form vient ici

Public Shared ReadOnly Property Count()
Get
Return m_nCount
End Get
End Property

Public Shadows Sub Show()

m_nCount += 1
MyBase.Show()

End Sub

Public Shadows Sub ShowDialog()

m_nCount += 1
MyBase.ShowDialog()

End Sub

Public Shadows Sub Close()

m_nCount -= 1
MyBase.Close()

End Sub

End Class
'***

Ainsi dans ton formulaire appelant, tu n'as qu'à testé le Count de la classe
Form2 avant de procéder à l'ouverture :
'***
Option Explicit On

Public Class Form1
Inherits System.Windows.Forms.Form

' Le Code généré par le Concepteur Windows Form vient ici

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles Button1.Click

If (Form2.Count = 0) Then
Dim frm As Form2
frm = New Form2
frm.Show()
Else
MessageBox.Show("La fenêtre est déjà ouverte.")
End If

End Sub
End Class
'***

--
Cordialement
Yanick
MVP pour Visual Basic
"Matteo " <stephane<nospam> a écrit dans le message de
news:d5sm8i$4r0$
Bonjour,

Je suis debutant en dotnet et je fais un prog qui doit permettre a
utilisateur de travailler sur deux feuille simultanément.
Donc je lance ma premiere feuille et j'ai un bouton qui ouvre une deuxieme
feuille.
Mais je ne veux pas que l'utilisateur clique plusieur fois sur ce bouton


et
ouvrir ainsi plusieur feuille.
Est il possible de detecter si la feuille est deja ouverte ?

PS: je ne veux pas ouvrir ma deuxieme feuille dans avec la methode
Showdialog car l'utilisateur doit pouvoir acceder au 2 feuilles.


Merci.




Avatar
Matteo
Pas bete du tout ton idée.
Merci bcp pour ton astuce.

"Zoury" <yanick_lefebvre at hotmail dot com> a écrit dans le message de
news:e5dq%
Salut Matteo ! :O)

Voici une solution simple :

Dans ton formulaire *appelé* (celui qui ne peut être ouvert plus d'une
fois), ajoute un compteur (propriété Shared) que tu incrémentes via les
fonctions Show() et ShowDialog() et décrémente via Close() (avec le mot


clé
Shadows).
'***
Option Explicit On

Public Class Form2
Inherits System.Windows.Forms.Form

Private Shared m_nCount As Int32

' Le Code généré par le Concepteur Windows Form vient ici

Public Shared ReadOnly Property Count()
Get
Return m_nCount
End Get
End Property

Public Shadows Sub Show()

m_nCount += 1
MyBase.Show()

End Sub

Public Shadows Sub ShowDialog()

m_nCount += 1
MyBase.ShowDialog()

End Sub

Public Shadows Sub Close()

m_nCount -= 1
MyBase.Close()

End Sub

End Class
'***

Ainsi dans ton formulaire appelant, tu n'as qu'à testé le Count de la


classe
Form2 avant de procéder à l'ouverture :
'***
Option Explicit On

Public Class Form1
Inherits System.Windows.Forms.Form

' Le Code généré par le Concepteur Windows Form vient ici

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles Button1.Click

If (Form2.Count = 0) Then
Dim frm As Form2
frm = New Form2
frm.Show()
Else
MessageBox.Show("La fenêtre est déjà ouverte.")
End If

End Sub
End Class
'***

--
Cordialement
Yanick
MVP pour Visual Basic
"Matteo " <stephane<nospam> a écrit dans le message de
news:d5sm8i$4r0$
> Bonjour,
>
> Je suis debutant en dotnet et je fais un prog qui doit permettre a
> utilisateur de travailler sur deux feuille simultanément.
> Donc je lance ma premiere feuille et j'ai un bouton qui ouvre une


deuxieme
> feuille.
> Mais je ne veux pas que l'utilisateur clique plusieur fois sur ce bouton
et
> ouvrir ainsi plusieur feuille.
> Est il possible de detecter si la feuille est deja ouverte ?
>
> PS: je ne veux pas ouvrir ma deuxieme feuille dans avec la methode
> Showdialog car l'utilisateur doit pouvoir acceder au 2 feuilles.
>
>
> Merci.
>
>




Avatar
Zoury
Peut-être mais je l''ai posté trop vite.. :O)
ce n'est pas la méthode Close() qu'il faut remplacer mais plutôt l'événement
Closed qu'il faut implémenté.

Remplace :
> Public Shadows Sub Close()
>
> m_nCount -= 1
> MyBase.Close()
>
> End Sub



Par :
'***
Private Sub Form2_Closed(ByVal sender As Object, ByVal e As
System.EventArgs) Handles MyBase.Closed
m_nCount -= 1
End Sub
'***

--
Cordialement
Yanick
MVP pour Visual Basic
Avatar
Matteo
Ok merci Zoury pour toutes ces précisions.

"Zoury" <yanick_lefebvre at hotmail dot com> a écrit dans le message de
news:eCjik$
Peut-être mais je l''ai posté trop vite.. :O)
ce n'est pas la méthode Close() qu'il faut remplacer mais plutôt


l'événement
Closed qu'il faut implémenté.

Remplace :
> > Public Shadows Sub Close()
> >
> > m_nCount -= 1
> > MyBase.Close()
> >
> > End Sub

Par :
'***
Private Sub Form2_Closed(ByVal sender As Object, ByVal e As
System.EventArgs) Handles MyBase.Closed
m_nCount -= 1
End Sub
'***

--
Cordialement
Yanick
MVP pour Visual Basic