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 :

[C#] Modifier mes Forms a partir de Class


Sujet :

Windows Forms

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 25
    Par défaut [C#] Modifier mes Forms a partir de Class
    Hello tout le monde !

    J'ai quelques questions de debutant , j'espere que je poste au bon endroit (sait-on jamais) ...

    Alors voila , je viens de finir l'interface de mon appli (un petit lecteur de flux RSS , rien de revolutionnaire , juste une mise en bouche sur dotnet , c# et visual studio et sqlite embed)

    je me retrouver donc avec un treeview qui me sert a classer les flux :

    premier niveau > type de flux (news, it, humour etc..).
    deuxieme niveau > les flux.

    J'ai donc creer deux classes 'Dir' (le premier niveau) et 'Flux' (le deuxieme) dans deux fichier separé. (déja .. est-ce la bonne facon de proceder ?)

    Lorsque l'utilisateur saisira le nom d'un nouveau type de flux dans une textbox je creerais donc un nouvel objet de type 'Dir'.

    son constructeur devra donc :
    - completer les attributs de l'objet (_nom etc..)
    - rajouter une entrée dans le treeview (dans le formulaire)
    - acceder a la bdd et faire un insert a l'aide d'une autre classe

    (encore une fois... ce systeme parait-il logique ? )

    Mon probleme se situe au niveau de la modification du treeview , j'ai beau regardé le probleme dans tous les sens , je n'arrive pas a permettre a cette classe ('Dir') d'acceder aux controls de ma 'Form Principale' ...

    Suis-je passé a coté de l'evidence? surement

    Merci d'avance!

    PS: j'ai des bases de C++ et donc d'heritage & co , mais je n'ai jamais eut a faire avec des interfaces graphiques.

  2. #2
    Rédacteur
    Avatar de cladsam
    Profil pro
    Inscrit en
    Août 2003
    Messages
    1 787
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Août 2003
    Messages : 1 787
    Par défaut
    Ben il suffit de donné la form en question en paramètre à une méthode du treeview donc il faut que la form soit déclarée

    Ex:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     Form ma_form = new Form();
     monTreeview.mamethode(ma_form);
    Si le problème ets plsu compliqué que ca, alors il mériterait que tu donnes plus d'explications

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 25
    Par défaut
    non en fait a mon avis c'est plus simple que ca

    J'ai mon form1.cs qui contient Form1.Designer.cs et Form1.resx (l'interface et le code associé aux controls du formulaire)

    Et j'ai un fichier .cs par class (Dir.cs, Flux.cs, Item.cs, Database.cs)

    Dans chacun des class il va y avoir des methodes qui vont aller modifier mon formulaire , par exemple rajouter des elements dans ma treeview ou rajouter des lignes dans ma listeview ...

    le probleme c'est que je n'arrive pas acceder aux controls du formulaire a partir des mes class (Dir.cs, Flux.cs, Item.cs, Database.cs)

    EDIT: je crois que je viens de comprendre :p
    dans le form1.designer.cs tous les controls sont en private

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    private System.Windows.Forms.TreeView treeview_dir;
    Donc il faudrait que je rajoute des methodes public d'acces aux controls dans la class Form1 ?

    Je crois que c'etait ca mon probleme :p

    EDIT: mouais en fait non

  4. #4
    Rédacteur
    Avatar de cladsam
    Profil pro
    Inscrit en
    Août 2003
    Messages
    1 787
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Août 2003
    Messages : 1 787
    Par défaut
    Ben non mes il faut juste que tes methodes aient une référence vers le form auquel elle vdoivent accéder.
    La un exemple de code pour montrer comment tes classes sont organisées en tre elles et a quel endroit tu tentes d'accéder aux composant de ton form me serait très utile.
    Donc essaye de mettre les morceaux de codes significatifs et je ne pense pas qu'on mettra longtemps a mettre le doigt sur ce qui manque

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 25
    Par défaut
    EDIT: j'etais en train de copier mes class au même moment

    Alors voila ... pour le moment c'est tres simpliste (juste le contructeur )

    Dans mon form1.cs (formulaire principal) j'ai un bouton et un event sur le click

    Code form1.cs : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    private void btn_dir_add_Click(object sender, EventArgs e)
    {
          Dir testdir = new Dir(1, "test");
    }

    Qui va creer un objet Dir et appel du contructeur simpliste ...

    Code Dir.cs : 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
    using System;
    using System.Collections.Generic;
    using System.Text;
    using System.Data.SQLite;
    using System.Windows.Forms;
     
    namespace ix.RSS
    {
        public class Dir
        {
            private int _id;
            private String _nom;
     
            public Dir(int id,String nom)
            {
                Console.Out.Write("Constructeur Dir (int,string)\n");
                //L'objet
                this._id = id;
                this._nom = nom;
                //le formulaire
                Form_Princ ma_form = new Form_Princ();
                ma_form.addNode();
            }
        }
    }

    J'ai creer un nouveau fichier formulaire.cs qui va contenir les methodes public d'acces aux controls

    Le constructeur Appel une methode public qui tente de modifier une textebox

    Code formulaire.cs : 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
    using System;
    using System.IO;
    using System.Text;
    using System.Windows.Forms;
     
    namespace ix.RSS
    {
        partial class Form_Princ : Form
        {
            public void addNode()
            {
                Console.Write("addNode()\n");
                //On commence par une textbox histoire de faire simple
                this.textBox1.Text = "addnode"; 
            }
        }

    Mon probleme se situe au niveau de l'appel de la methode addNode , je suis obligé de creer un nouveau objet Form_princ ... et biensur cela ne fonctionne pas vraiment sur cet objet :/

  6. #6
    Rédacteur
    Avatar de cladsam
    Profil pro
    Inscrit en
    Août 2003
    Messages
    1 787
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Août 2003
    Messages : 1 787
    Par défaut
    tu l'affiche quand ton form?

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 25
    Par défaut
    Hmm et bien j'ai utilisé Nouveau Projet Application Windows ..

    j'ai donc program.cs

    Code program.cs : 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
    using System;
    using System.Collections.Generic;
    using System.Windows.Forms;
     
    namespace ix.RSS
    {
        static class Program
        {
            /// <summary>
            /// Point d'entrée principal de l'application.
            /// </summary>
            [STAThread]
            static void Main()
            {
                Application.EnableVisualStyles();
                Application.SetCompatibleTextRenderingDefault(false);
                Application.Run(new Form_Princ());
            }
        }
    }

    et mon form1.cs
    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
    27
    28
    29
    using System;
    using System.IO;
    using System.Collections;
    using System.Collections.ObjectModel;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Text;
    using System.Windows.Forms;
     
     
    namespace ix.RSS
    {
        public partial class Form_Princ : Form
        {
            public Form_Princ()
            {
                InitializeComponent();
            }
     
            private void Form1_Load(object sender, EventArgs e)
            {
     
            }
     
           // + toutes les evements sur click & co
       }
    }

  8. #8
    Rédacteur
    Avatar de cladsam
    Profil pro
    Inscrit en
    Août 2003
    Messages
    1 787
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Août 2003
    Messages : 1 787
    Par défaut
    On en revient donc a ce que je pensais : quand tu crées un objet formPrinc qui est passé à Application.RUn mais tu ne gardes pas la référence de cet objet.

    Il faut faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    monForm = new formPrincipale();
    Application.Run(monForm);

    Ca te pemret de pouvoir agir sur le form afficher.
    Ensuite il faut acceder a cet objet surlequel tu vas appeler AddNode().
    La facon d'y acceder va dépendre de la façon de déclarer le Dir.
    Par exemple si le Dir est créé dans le Form tu peux passer this (lobjet courant) au constructeur du Dir.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Dir monDir = newDir(this);
    Et agir sur le parmaètre passé en faisant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    leparamètre.addNode();
    ce n'ets pas la seule façon ca dépend de l'organisation de ton code

  9. #9
    Membre averti
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 25
    Par défaut
    Citation Envoyé par cladsam
    ca dépend de l'organisation de ton code
    C'est a dire ?
    Quels sont les choix en fait ?

    La j'essaye d'organiser les choses pour que tout ce qui n'a pas de rapport direct ne soit ni dans la même classe ni dans le même fichier .cs

    EDIT: ok donc maintenant ca fonctionne , mais je trouve ca pas tres propre ... il n'existe rien de plus transparent ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    -- la creation de mon Form_Princ
    Form_Princ monForm = new Form_Princ();
    Application.Run(monForm);
     
    -- l'appel du contructeur
    Dir testdir = new Dir(this, 1, "test");
     
    -- le constructeur
    public Dir(Form_Princ sender,int id,String nom)
    {
         sender.addNode();
    }

  10. #10
    Rédacteur
    Avatar de cladsam
    Profil pro
    Inscrit en
    Août 2003
    Messages
    1 787
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Août 2003
    Messages : 1 787
    Par défaut
    Ben comme tu as fait la ca me parait plutot bien.
    Ensuite si tu veux faire autrement je vois pas trop... qu'ets-ce qui te gene exactement dans cette méthode?
    Il existe PEUT ETRE un truc style Application.Form[0].AddNode mais si tel est le cas... je l'ignore totalement.

  11. #11
    Membre averti
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 25
    Par défaut
    C'etait le fait de passer this de partout mais bon c'est pas si genant que ca au final

    Bon maintenant faudrait que je code un peu

    Merci beaucoup!

  12. #12
    Rédacteur
    Avatar de cladsam
    Profil pro
    Inscrit en
    Août 2003
    Messages
    1 787
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Août 2003
    Messages : 1 787
    Par défaut
    [QUOTE=folk]
    Bon maintenant faudrait que je code un peu
    QUOTE]
    Je compatis je fais la meme chose ... mais en Abap :'(

  13. #13
    Membre averti
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 25
    Par défaut
    ah , j'avais rencontré un 'abapeur' dans une boite qui bossait sur SAP, il avait l'air de ... s'amuser

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 14/08/2010, 18h18
  2. manipuler ma form a partir d'une autre class
    Par ralf91 dans le forum C#
    Réponses: 3
    Dernier message: 18/03/2010, 22h09
  3. Réponses: 1
    Dernier message: 08/11/2009, 22h07
  4. Message sur une form a partir d'une class
    Par topolino dans le forum Windows Forms
    Réponses: 4
    Dernier message: 10/06/2009, 08h57
  5. comment modifier la couleur de toutes mes forms
    Par korntex5 dans le forum Delphi
    Réponses: 3
    Dernier message: 08/08/2006, 15h29

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