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 :

Partage d'objets / composants [APP MDI]


Sujet :

Windows Forms

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé Avatar de Nadd
    Profil pro
    Étudiant
    Inscrit en
    Septembre 2005
    Messages
    160
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2005
    Messages : 160
    Par défaut Partage d'objets / composants [APP MDI]
    Bonsoir!

    Me voila lancé dans la création de ma première application Windows en C#
    Etant débutant, il me reste encore beaucoup de subtilités à acquérir et c'est pour cela que je me tourne vers vous aujourd'hui

    J'ai opté pour une application MDI ! J'ai donc ainsi crée, ormis la Form1, une nouvelle Form (appellé Login) qui a pour unique but de se connecter (ou plutôt d'utiliser une connexion éxistante préalablement créee dans la Form1) à une base de donnée afin de vérifier le contenu de deux textboxs Tout ceci afin de faire passer à "true" la propriété Enable de divers Menu (de Form1 bien entendu). Seule Hic, comment accéder à ma connexion SQL et aux divers composants de ma fenêtre principale, tels que mes menus, à partir de ma fenêtre Login ?

    En vous remerçiant d'avance,

    Nadd

  2. #2
    Membre confirmé Avatar de Nadd
    Profil pro
    Étudiant
    Inscrit en
    Septembre 2005
    Messages
    160
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2005
    Messages : 160
    Par défaut
    Je viens d'essayer de modifier une propriété enable de ma Form1 en créant (dans le code de celle-ci) une fonction public permettant de faire passer à true la propriété enable en question à partir de la Form2 :

    Form2.cs
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    private void bLogin_Click(object sender, EventArgs e)
    {
        Dollar dollar = (Dollar)this.MdiParent;
        dollar.SetEnable();
    }
    Form1.cs
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    public void SetEnable()
    {
       déconnectionToolStripMenuItem.Enabled = true;
    }
    Ca marche, toutefois le code me semble un peu "primaire". J'ai surement dû passer à côté de quelque chose d'essentiel, mais quoi ?

    Le problème réside, je pense, dans le fait que les composants tels que les Menus sont privées. Dois-je les rendre publiques ou existe-t-il une autre manière de faire ?

    Note : Quand est-il du mot clef Internal ?

    Cordialement,

    Nadd!

  3. #3
    Rédacteur
    Avatar de SaumonAgile
    Homme Profil pro
    Team leader
    Inscrit en
    Avril 2007
    Messages
    4 028
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Team leader
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2007
    Messages : 4 028
    Par défaut
    Le problème avec cette approche est que tes fenêtres sont très fortement dépendantes. Pourquoi ne pas utiliser une classe séparée pour exécuter les requêtes et ainsi ne pas avoir à stocker les paramètres tel que les chaines de connexion dans les fenêtres.
    Une deuxième chose, il serait bon de ne pas faire des appels dans les deux sens entre les fenêtres, par exemple form1 crée form2, mais form2 utilise des méthodes de form1. Dans ce cas, j'utiliserais soit une classe de base pour toutes les formes; soit des événements dans form2. je m'explique :
    form1 instancie une form2 et garde une référence sur l'instance. form2 contient un événement statusChanged. form1 s'abonne à l'événement de form2 et quand l'événement est déclenché, exécute une action donnée.

    En pratique ça donne :

    Dans le chargement de form1 (ou un autre événement) :

    login = new FLogin(); // login peut être un attribut de classe
    FLogin.LoginSuccessful += new EventHandler(FLogin_loginSuccessful);

    Dans le gestionnaire d'événement :
    private void FLogin_loginSuccessful(object sender, EventArgs event)
    {
    login.Close();
    }

    m2c...
    Besoin d'un MessageBox amélioré ? InformationBox pour .NET 1.1, 2.0, 3.0, 3.5, 4.0 sous license Apache 2.0.

    Bonnes pratiques pour les accès aux données
    Débogage efficace en .NET
    LINQ to Objects : l'envers du décor

    Mon profil LinkedIn - MCT - MCPD WinForms - MCTS Applications Distribuées - MCTS WCF - MCTS WCF 4.0 - MCTS SQL Server 2008, Database Development - Mon blog - Twitter

  4. #4
    Rédacteur
    Avatar de SaumonAgile
    Homme Profil pro
    Team leader
    Inscrit en
    Avril 2007
    Messages
    4 028
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Team leader
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2007
    Messages : 4 028
    Par défaut Internal
    Le mot-clé internal sert à définir que l'attribut/propriété/méthode/etc est accessible dans l'assembly. Je m'en sers quand je développe des bibliothèques, mais je ne pense pas que ce soit une bonne solution pour ton problème.
    Besoin d'un MessageBox amélioré ? InformationBox pour .NET 1.1, 2.0, 3.0, 3.5, 4.0 sous license Apache 2.0.

    Bonnes pratiques pour les accès aux données
    Débogage efficace en .NET
    LINQ to Objects : l'envers du décor

    Mon profil LinkedIn - MCT - MCPD WinForms - MCTS Applications Distribuées - MCTS WCF - MCTS WCF 4.0 - MCTS SQL Server 2008, Database Development - Mon blog - Twitter

  5. #5
    Membre confirmé Avatar de Nadd
    Profil pro
    Étudiant
    Inscrit en
    Septembre 2005
    Messages
    160
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2005
    Messages : 160
    Par défaut
    Merci pour ces réponses !

    Pourquoi ne pas utiliser une classe séparée pour exécuter les requêtes et ainsi ne pas avoir à stocker les paramètres tel que les chaines de connexion dans les fenêtres.
    Pouriez-vous (si possible, loin de moi l'idée de vous faire perdre votre temps) me fournir un exemple concret quant à l'utilisation d'une classe séparée accessible depuis Form1 et Form2 ?

    - La création de cet objet doit-il se faire dans Main ?

    Cordialement,

    Nadd

  6. #6
    Rédacteur
    Avatar de SaumonAgile
    Homme Profil pro
    Team leader
    Inscrit en
    Avril 2007
    Messages
    4 028
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Team leader
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2007
    Messages : 4 028
    Par défaut Méthodes statiques
    Utilise plutot une classe statique (qui contient des méthodes déclarées avec le mot clé static) qui te permet de ne pas créer d'instance de cette classe. Tu peux aussi utiliser le design pattern singleton qui te permet de pouvoir accéder à une instance d'une classe donnée (toujours la même).

    Par exemple, tu déclares une classe SqlHelper avec une méthode :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    public static ClasseClient getClient(string ID)
    {...}
    et dans tes fenêtres tu appelles :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SqlHelper.getClient(monId);
    PS : Si tu n'es pas familier avec les design patterns, je ne saurais que te conseiller de le devenir au plus vite.
    Besoin d'un MessageBox amélioré ? InformationBox pour .NET 1.1, 2.0, 3.0, 3.5, 4.0 sous license Apache 2.0.

    Bonnes pratiques pour les accès aux données
    Débogage efficace en .NET
    LINQ to Objects : l'envers du décor

    Mon profil LinkedIn - MCT - MCPD WinForms - MCTS Applications Distribuées - MCTS WCF - MCTS WCF 4.0 - MCTS SQL Server 2008, Database Development - Mon blog - Twitter

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

Discussions similaires

  1. [WinForms]Comment partager des objets entre threads ?
    Par AiSpirit dans le forum Général Dotnet
    Réponses: 3
    Dernier message: 16/08/2006, 08h57
  2. [javaBean + JSP] comment partager un objet entre les page JSP
    Par subzero82 dans le forum Servlets/JSP
    Réponses: 4
    Dernier message: 31/05/2006, 18h48
  3. [JTabbedPane] partager des objet
    Par biozaxx dans le forum AWT/Swing
    Réponses: 5
    Dernier message: 21/03/2006, 14h10
  4. Probleme d'un datamodule commun dans une app MDI
    Par Riko dans le forum Bases de données
    Réponses: 1
    Dernier message: 26/10/2005, 10h13
  5. [Tomcat][Plusieurs applications WEB] Partage d'objet.
    Par ZeKiD dans le forum Tomcat et TomEE
    Réponses: 8
    Dernier message: 09/04/2005, 13h23

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