IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Windows Forms Discussion :

[vb2003] Comment savoir si une form est ouvert


Sujet :

Windows Forms

  1. #1
    Membre actif
    Homme Profil pro
    DBA - Développeur BI
    Inscrit en
    Avril 2003
    Messages
    442
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : DBA - Développeur BI
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Avril 2003
    Messages : 442
    Points : 283
    Points
    283
    Par défaut [vb2003] Comment savoir si une form est ouvert
    Bonjour à tous et toutes

    Voilà mon souci j'ai une form mdi par le lequel j'ouvre d'autres form hors j'ai remarqué que si je clique plusieurs fois sur le menu ouvrir de ce mdi il m'ouvre plusieurs fois de suite la même form. J'ai vu ce code qui semble correspondre à ce que je veux mais je ne sais pas comment l'utiliser

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    public partial class Form2 : Form
    {
        private static Form2 myInstance = null;
     
        public static Form2 getInstance() {
            if (myInstance == null)
                myInstance = new Form2();
            return myInstance;
        }
     
        private Form2() {
            InitializeComponent();
        }
    }
     
    public partial class Form1 : Form
    {
        public Form1() {
            InitializeComponent();
        }
     
        private void Form1_Load(object sender, EventArgs e) {
            Form2 form = Form2.getInstance();
            // TODO
        }
    }
    est ce que quelqu'un aurait l'équivalent en vb 2003 car avec acces il y avait cette fonction

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Function isloaded(ByVal strformname As String) As Integer
    'Renvoie True si le formulaire spécifié est ouvert en mode formulaire ou feuille de données
    Const conObjStateClosed = 0
    Const condesignview = 0
    If SysCmd(acSysCmdGetObjectState, acForm, strformname) <> conObjStateClosed Then
    If Forms(strformname).CurrentView <> condesignview Then
    isloaded = True
    End If
    End If
    End Function
    que l'on utilise avec l'instruction if isloaded("nomformulaire"). Un grand merci d'avance.:

  2. #2
    Invité
    Invité(e)
    Par défaut
    c'est tres simple pour utilisé ce code au lieu de passer par le contructeur et une instanciation classqieu tu fais directement l'appelle à ta classe comme ceci:

    Form2.getInstance().Show() ;

    Le plus important est le getInstance que tu dois récupérer.

    PS: le code que tu as est pour le framework 2.0

  3. #3
    Membre actif
    Homme Profil pro
    DBA - Développeur BI
    Inscrit en
    Avril 2003
    Messages
    442
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : DBA - Développeur BI
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Avril 2003
    Messages : 442
    Points : 283
    Points
    283
    Par défaut
    Citation Envoyé par gcorbineau
    c'est tres simple pour utilisé ce code au lieu de passer par le contructeur et une instanciation classqieu tu fais directement l'appelle à ta classe comme ceci:

    Form2.getInstance().Show() ;

    Le plus important est le getInstance que tu dois récupérer.

    PS: le code que tu as est pour le framework 2.0
    Je te remercie pour cette précision mais je pense que ce code est en C# et je suis sous vb2003 avec le framework1.1. Comment faire pour le traduire en vb et l'adapter au framework 1.1. Je débute sous vb donc... j'ai cherché dans l'aide le getInstance mais les explications qui y sont ainsi que les exemples ne semblent pas correspondre à ce je cherche.
    Merci pour votre aide

  4. #4
    Membre expérimenté
    Avatar de Mehdi Feki
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    1 113
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 113
    Points : 1 566
    Points
    1 566
    Par défaut
    Convertisseur C# -> VB.NET de Developpez.com

    Pas de probleme pour les versions des frameworks

  5. #5
    Membre actif Avatar de miya
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    469
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2006
    Messages : 469
    Points : 240
    Points
    240
    Par défaut
    Pour ma part j'utilise un boolean 'flag' initialisé a false. Lors de l'ouverture d'une page mdifille je le met a true. Certe c'est peut etre pas jolie, c'est tres académique, mais l'avantage c'est que ca marche!

  6. #6
    En attente de confirmation mail
    Inscrit en
    Août 2006
    Messages
    550
    Détails du profil
    Informations personnelles :
    Âge : 49

    Informations forums :
    Inscription : Août 2006
    Messages : 550
    Points : 669
    Points
    669
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
     
    Public Class Form2
        Inherits System.Windows.Forms.Form
        Private Shared myInstance As Form1 = Nothing
        Public Sub New()
            MyBase.New()
            InitializeComponent()
        End Sub
        Public Shared Function getInstance() As Form2
            If IsNothing(myInstance) Then myInstance = New Form2
            Return myInstance
        End Function
    End Class
     
    Public Class Form1
        Inherits System.Windows.Forms.Form
        Public Sub New()
            MyBase.New()
            InitializeComponent()
        End Sub
        Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Form1.Load
            Dim frmForm2 As Form2
            frmForm2 = Form2.GetInstance()
            ' TODO
        End Sub
    End Class

  7. #7
    Membre actif Avatar de miya
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    469
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2006
    Messages : 469
    Points : 240
    Points
    240
    Par défaut
    Merci kelpan !

  8. #8
    Membre actif
    Homme Profil pro
    DBA - Développeur BI
    Inscrit en
    Avril 2003
    Messages
    442
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : DBA - Développeur BI
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Avril 2003
    Messages : 442
    Points : 283
    Points
    283
    Par défaut
    Citation Envoyé par Kelpan
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
     
    Public Class Form2
        Inherits System.Windows.Forms.Form
        Private Shared myInstance As Form1 = Nothing
        Public Sub New()
            MyBase.New()
            InitializeComponent()
        End Sub
        Public Shared Function getInstance() As Form2
            If IsNothing(myInstance) Then myInstance = New Form2
            Return myInstance
        End Function
    End Class
     
    Public Class Form1
        Inherits System.Windows.Forms.Form
        Public Sub New()
            MyBase.New()
            InitializeComponent()
        End Sub
        Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Form1.Load
            Dim frmForm2 As Form2
            frmForm2 = Form2.GetInstance()
            ' TODO
        End Sub
    End Class
    dans ton code, form1 c'est le mdiparent? Car quand je recopie ce code il me met des erreurs

  9. #9
    Membre actif
    Homme Profil pro
    DBA - Développeur BI
    Inscrit en
    Avril 2003
    Messages
    442
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : DBA - Développeur BI
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Avril 2003
    Messages : 442
    Points : 283
    Points
    283
    Par défaut
    Citation Envoyé par mehdi_tn
    Convertisseur C# -> VB.NET de Developpez.com

    Pas de probleme pour les versions des frameworks
    Ce convertisseur ne fonctionne pas avec le code que je lui passe il me dit erreur ligne 1

  10. #10
    Membre expérimenté
    Avatar de Mehdi Feki
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    1 113
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 113
    Points : 1 566
    Points
    1 566
    Par défaut
    Citation Envoyé par Herlece
    Ce convertisseur ne fonctionne pas avec le code que je lui passe il me dit erreur ligne 1
    Enleve les mots clés partial

  11. #11
    Membre actif
    Homme Profil pro
    DBA - Développeur BI
    Inscrit en
    Avril 2003
    Messages
    442
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : DBA - Développeur BI
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Avril 2003
    Messages : 442
    Points : 283
    Points
    283
    Par défaut
    Citation Envoyé par mehdi_tn
    Enleve les mots clés partial
    Ah cool sa fonctionne maintenant il me reste à savoir ou le placer ce code.

  12. #12
    Membre actif Avatar de miya
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    469
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2006
    Messages : 469
    Points : 240
    Points
    240
    Par défaut
    Une petite erreur dans le code, dans la class form2 on déclare une instance sur la form2 et non la form1

    Citation Envoyé par Kelpan
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    Public Class Form2
        Inherits System.Windows.Forms.Form
        Private Shared myInstance As Form2 = Nothing
        Public Sub New()
            MyBase.New()
            InitializeComponent()
        End Sub
        Public Shared Function getInstance() As Form2
            If IsNothing(myInstance) Then myInstance = New Form2
            Return myInstance
        End Function
    End Class

  13. #13
    En attente de confirmation mail
    Inscrit en
    Août 2006
    Messages
    550
    Détails du profil
    Informations personnelles :
    Âge : 49

    Informations forums :
    Inscription : Août 2006
    Messages : 550
    Points : 669
    Points
    669
    Par défaut
    Oui Miya a raison
    Il y a une erreur de frappe...

    Merci d'avoir corrigé

  14. #14
    Membre actif
    Homme Profil pro
    DBA - Développeur BI
    Inscrit en
    Avril 2003
    Messages
    442
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : DBA - Développeur BI
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Avril 2003
    Messages : 442
    Points : 283
    Points
    283
    Par défaut
    euh bien mais le code public class fom1 je le met sur la form1 et public class form2 je le met sur la form2? ne riez pas

  15. #15
    Membre expérimenté
    Avatar de FRED.G
    Profil pro
    Inscrit en
    Novembre 2002
    Messages
    1 032
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Novembre 2002
    Messages : 1 032
    Points : 1 505
    Points
    1 505
    Par défaut
    Citation Envoyé par Herlece
    j'ai une form mdi par le lequel j'ouvre d'autres form hors j'ai remarqué que si je clique plusieurs fois sur le menu ouvrir de ce mdi il m'ouvre plusieurs fois de suite la même form.
    Pour faire du code simple et propre, je te suggère d'utiliser les propriétés HasChildren et surtout MdiChildren de ton form parent.

    Ainsi tu pourras facilement déterminer s'il faut créer une nouvelle instance ou pas en comparant le type des formulaire enfant au type demandé par ton menu.

    Par exemple :
    Code VB.NET : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
        Sub AfficherUnForm(ByVal desiredTypeOfForm As System.Type, ByVal mdiParent As Windows.Forms.Form)
            With mdiParent
                If .HasChildren Then
                    For Each f As Windows.Forms.Form In .MdiChildren
                        If f.GetType Is desiredTypeOfForm Then
                            If Not f.Visible Then f.Visible = True
                            Exit Sub
                        End If
                    Next
                End If
            End With
            DirectCast(System.Activator.CreateInstance(desiredTypeOfForm), Windows.Forms.Form).Show(mdiParent)
        End Sub

  16. #16
    Membre actif
    Homme Profil pro
    DBA - Développeur BI
    Inscrit en
    Avril 2003
    Messages
    442
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : DBA - Développeur BI
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Avril 2003
    Messages : 442
    Points : 283
    Points
    283
    Par défaut
    [QUOTE=FRED.G]Pour faire du code simple et propre, je te suggère d'utiliser les propriétés HasChildren et surtout MdiChildren de ton form parent.

    Ainsi tu pourras facilement déterminer s'il faut créer une nouvelle instance ou pas en comparant le type des formulaire enfant au type demandé par ton menu.

    Ok j'essai avec ton code et je te tiens au courant

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Comment savoir si mon form est ouvert
    Par skunkies dans le forum Windows Forms
    Réponses: 2
    Dernier message: 10/12/2008, 12h17
  2. savoir si une form est ouverte pour la fermer
    Par olibara dans le forum Windows Forms
    Réponses: 25
    Dernier message: 13/05/2008, 19h24
  3. Comment savoir si une form est ouverte (créé)?
    Par UnSofteuxAmateur dans le forum Delphi
    Réponses: 1
    Dernier message: 30/09/2006, 11h24
  4. [Swing] comment savoir si une fenetre est ouverte ?
    Par uraxyd dans le forum AWT/Swing
    Réponses: 3
    Dernier message: 31/12/2005, 11h55
  5. [Excel] comment savoir si une feuille est ouverte ?
    Par scully2501 dans le forum Access
    Réponses: 11
    Dernier message: 07/10/2005, 15h02

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo