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

C# Discussion :

Afficher un unique Form [Débutant]


Sujet :

C#

  1. #1
    Membre confirmé
    Inscrit en
    Novembre 2010
    Messages
    55
    Détails du profil
    Informations forums :
    Inscription : Novembre 2010
    Messages : 55
    Par défaut Afficher un unique Form
    Bonjour,
    je debute avec le c# et dans mon application j'ai beaucoup de transactions entre les fenetres et à chaque Form.Show() je trouve un doublant.
    j'ai essayé avec Form.ShowDialog() mais toujours le meme probleme.

  2. #2
    Membre éclairé Avatar de Faereth
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2007
    Messages
    92
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Bâtiment

    Informations forums :
    Inscription : Janvier 2007
    Messages : 92
    Par défaut
    Bonjour,

    Tu as un peu plus d'informations, parce que là je dois t'avouer ne pas tout comprendre à ton problème?

  3. #3
    Membre confirmé
    Inscrit en
    Novembre 2010
    Messages
    55
    Détails du profil
    Informations forums :
    Inscription : Novembre 2010
    Messages : 55
    Par défaut
    bonjour,

    voila mon problème : j'ai une fenêtre principale de la qu'elle j'ouvre une autre fenêtre, jusque la c'est bon le problème et que quand je clik une autre fois sur le bouton pour ouvrir j'ai une autre fenêtre qui s'ouvre ( exemple pour "a propos" je peux avoir 2 ou plus ouverte en même temps )

    comment résoudre ce problème, merci

    voila mon code pour ouvrir la fenêtre

    Code c# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
                Form3 frm = new Form3(); 
                frm.Show();

  4. #4
    Membre émérite
    Avatar de Gurdil le nain
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Avril 2009
    Messages
    468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2009
    Messages : 468
    Par défaut
    En gros quand tu ouvres un nouveau formulaire, tu aimerais ne plus avoir accès au précédent jusqu'à fermeture du nouveau c'est ça ?

  5. #5
    Membre éclairé Avatar de Faereth
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2007
    Messages
    92
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Bâtiment

    Informations forums :
    Inscription : Janvier 2007
    Messages : 92
    Par défaut
    Tu veux masquer les autres fenêtres quand tu en ouvre une nouvelle?

    @Gurdil : Il me semble que quand tu ouvres un form à partir d'un autre, tant que tu n'as pas fermé ce form tu ne peux rien faire sur l'autre. Mais c'est peut être qu'avec le form.ShowDialog();

  6. #6
    Membre émérite
    Avatar de Gurdil le nain
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Avril 2009
    Messages
    468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2009
    Messages : 468
    Par défaut
    Citation Envoyé par Faereth Voir le message
    @Gurdil : Il me semble que quand tu ouvres un form à partir d'un autre, tant que tu n'as pas fermé ce form tu ne peux rien faire sur l'autre. Mais c'est peut être qu'avec le form.ShowDialog();
    Ouaip, ce n'est qu'avec le ShowDialog que les autres formulaires sont inaccessibles.

  7. #7
    Membre émérite Avatar de ppphil
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    617
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juin 2007
    Messages : 617
    Par défaut
    Citation Envoyé par maestroENSI Voir le message
    Bonjour,
    je debute avec le c# et dans mon application j'ai beaucoup de transactions entre les fenetres et à chaque Form.Show() je trouve un doublant.
    j'ai essayé avec Form.ShowDialog() mais toujours le meme probleme.
    Négatif mon cher Watson !
    Si tu as ouvert ta form avec showdialog, tu ne peux plus accéder au bouton de la form appelante....

  8. #8
    Membre confirmé
    Inscrit en
    Novembre 2010
    Messages
    55
    Détails du profil
    Informations forums :
    Inscription : Novembre 2010
    Messages : 55
    Par défaut
    Oui c'est ce que j'ai trouvé form.ShowDialog()
    Mais toujours le meme pb, est ce qu'il suffit de remplacer .Show() par .ShowDialog() ou il ya un autre bout de code à insérer?

  9. #9
    Membre éclairé Avatar de Faereth
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2007
    Messages
    92
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Bâtiment

    Informations forums :
    Inscription : Janvier 2007
    Messages : 92
    Par défaut
    Mais c'est quoi ton problème en fait? Je comprends pas "un doublant"...

  10. #10
    Membre confirmé
    Inscrit en
    Novembre 2010
    Messages
    55
    Détails du profil
    Informations forums :
    Inscription : Novembre 2010
    Messages : 55
    Par défaut
    en fait j'ai un Form1 comportant un bouton qui amene à un autre form2, je doit extraire des informations de Form2 et les inserer dans Form1. J'ai obtenu finalement un double Forme1 le premier est vide et le 2eme mis à jour par les données que j'ai insérées.

    Je veux obtenir uniquement un seul Form1 mis à jour sans garder le precedent.

  11. #11
    Membre émérite
    Avatar de Gurdil le nain
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Avril 2009
    Messages
    468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2009
    Messages : 468
    Par défaut
    Ah ok, il y a donc un soucis de conception là...
    D'après ce que tu dis, je comprends qu'à la fermeture du Form2, tu recréé un form1 avec des nouveaux paramtètres (tes données) pour le remplir.

    Il vaudrait mieux que tu surcharge le constructeur de ton Form2, en lui passant en paramètres ton Form1 (déjà créé mais plus accessible grâce au ShowDialog), et à la fermeture du Form2 (évènement Form_Closing) tu appelles une fonction du Form1 qui va le rafraichir...

    Clair ?

  12. #12
    Membre confirmé
    Inscrit en
    Novembre 2010
    Messages
    55
    Détails du profil
    Informations forums :
    Inscription : Novembre 2010
    Messages : 55
    Par défaut
    Oui c'est claire mais ambiguë
    Vous pouvez me donner un exemple svp

  13. #13
    Membre émérite
    Avatar de Gurdil le nain
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Avril 2009
    Messages
    468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2009
    Messages : 468
    Par défaut
    Bon je t'ai fait un code tout simple :
    Form1 contient un bouton (buttonForm1) qui va ouvrir Form2 et un textBox (textBoxForm1) qui va se charger à la fermeture de Form2.
    Form2 contient un bouton (buttonForm2) qui va recharger Form1 et un textbox (textBoxForm2) qui va servir à taper du texte.

    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
    30
    31
    32
    33
    34
    35
    36
    37
    public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
            }
     
            private void buttonForm1_Click(object sender, EventArgs e)
            {
                Form2 form = new Form2 (this); //Ici on appelle Form2 en lui passant Form1
                form.ShowDialog();
            }
     
            public void loadData(String data)
            {
                this.textBoxForm1.Text = data;
            }
        }
     
    public partial class Form2 : Form
        {
            private Form1 precForm;
     
            //Le constructeur redéfinit
            public Form2(Form1 form)
            {
                InitializeComponent();
                precForm = form;
            }
     
            private void buttonForm2_Click(object sender, EventArgs e)
            {
                precForm.loadData(this.textBoxForm2.Text); //Ici on renvoie les données à Form1
                this.Close();
            }
     
        }

  14. #14
    Membre émérite Avatar de ppphil
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    617
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juin 2007
    Messages : 617
    Par défaut
    Moi ce que je vois, puisque je commence seulement à comprendre, c'est de passer des paramètres (si besoin) à une nouvelle fonction qui va ouvrir le form2 puis retourner les données pour refaire le form1

    un objet de données
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    public class Data
    {
      public int DtInt {get;set;}
      public string DtStr {get;set;}
      .... etc
    }
    dans form2
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    public Data ShowForm2(éventuels paramètres)
    {
      Data ret = new Data();
      ShowDialog();
      ret.Dtint = 1;
      ret.DtStr = "coucou";
      return ret;
    }
    dans form1
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    Data data;
    Form2 form2 = new Form2();
    data = form2.ShowForm2(paramètres);
    this.tralala = data.DtInt;
    this.toto = data.DtStr;

  15. #15
    Membre éclairé Avatar de Faereth
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2007
    Messages
    92
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Bâtiment

    Informations forums :
    Inscription : Janvier 2007
    Messages : 92
    Par défaut
    La solution de Gurdil à l'air nickel pour ce que tu veux.

    Par contre pour en revenir à ton double de formulaire, lors de la fermeture de ton form2 tu ne fais pas à nouveau une instanciation de form1, puis form1.Show() ? Parce que là ce serait normal que tu es un nouveau form1 vide en plus de l'autre.

  16. #16
    Membre émérite
    Avatar de Gurdil le nain
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Avril 2009
    Messages
    468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2009
    Messages : 468
    Par défaut
    @ppphil :

    Comment il fait si ce sont des données rentrées par l'utilisateur ?

    Ta méthode fonctionne uniquement pour des données fixes définies dans la fonction ShowForm2, ou alors j'ai pas pigé ton code

  17. #17
    Membre chevronné Avatar de _PascalC_
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2008
    Messages
    220
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2008
    Messages : 220
    Par défaut
    La solution de Gurdil est intéressante mais impose que Form2 travaille directement avec Form1 (...ce qui n'est pas idéal pour un certain nombre de raison).
    Une solution possible pour contourner le soucis :

    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
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
     
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
     
        private void button1_Click(object sender, EventArgs e)
        {
            using (Form2 frm = new Form2())
            {
                if (frm.ShowDialog() == DialogResult.OK)
                    this.TextBoxForm1.Text = frm.Data;
            }
        }
    }
     
    public partial class Form2 : Form
    {
        private string _data;
     
        public string Data { get { return _data; } }
     
        public Form2()
        {
            InitializeComponent();
        }
     
        private void btnOk_Click(object sender, EventArgs e)
        {
            this.DialogResult = DialogResult.OK;
            _data = this.TextBoxForm2.Text;
            Close();
        }
     
        private void btnCancel_Click(object sender, EventArgs e)
        {
            this.DialogResult = DialogResult.Cancel;
            Close();
        }
    }
    Pascal

  18. #18
    Membre éclairé Avatar de Faereth
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2007
    Messages
    92
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Bâtiment

    Informations forums :
    Inscription : Janvier 2007
    Messages : 92
    Par défaut
    @_PascalC_ : Bonjour ! Effectivement ta solution est bien pensée, par contre pourrais-tu développer les raisons pour lesquelles la façon de faire de Gurdil n'est pas idéale? Simple curiosité de ma part

  19. #19
    Membre émérite
    Avatar de Gurdil le nain
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Avril 2009
    Messages
    468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2009
    Messages : 468
    Par défaut
    Citation Envoyé par Faereth Voir le message
    @_PascalC_ : Bonjour ! Effectivement ta solution est bien pensée, par contre pourrais-tu développer les raisons pour lesquelles la façon de faire de Gurdil n'est pas idéale? Simple curiosité de ma part
    Et bien ma solution impose que Form2 soit appelée par Form1 puisque son constructeur nécessite un paramètre de type Form1...donc au final pas très générique

  20. #20
    Membre éclairé Avatar de Faereth
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2007
    Messages
    92
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Bâtiment

    Informations forums :
    Inscription : Janvier 2007
    Messages : 92
    Par défaut
    Oki, je peux te demander ce que tu entends par générique?

    Désolé, je profite de se post pour me cultiver un peu J'utilise cette façon de faire dans un projet parce que j'ai besoin de manipuler des NumericUpDown via un autre formulaire. Et si on pouvait m'éclairer sur une meilleur façon de faire je serai preneur

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Réponses: 9
    Dernier message: 04/04/2007, 18h32
  2. [C# 2.0]Panel ou UserControl pour afficher != pages sur form
    Par frechy dans le forum Windows Forms
    Réponses: 11
    Dernier message: 22/02/2006, 11h04
  3. Réponses: 4
    Dernier message: 23/01/2006, 19h51
  4. afficher messsage uniquement si fermeture !!
    Par NoobX dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 20/11/2005, 20h24
  5. Réponses: 2
    Dernier message: 14/04/2005, 22h57

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