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 :

Retourner une valeur lors de la fermeture d'une boîte de dialogue


Sujet :

C#

  1. #1
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 856
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 856
    Points : 52 993
    Points
    52 993
    Billets dans le blog
    6
    Par défaut Retourner une valeur lors de la fermeture d'une boîte de dialogue
    Bonjour,

    Je dispose d'une main form qui a une variable de nom serverName déclarée de manière globale :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    using System;
    ...
    using System.Windows.Forms;
    
    namespace WFA_sql
    {
        public partial class FRM_retrosert : Form
        {
            string serverName;
            public FRM_retrosert()
            {
                InitializeComponent();
    ...

    j'ai ouvert une boîte de dialogue depuis un main form, par ce code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
            private void TB_ServerName_DoubleClick(object sender, EventArgs e)
            {
                Cursor.Current = Cursors.WaitCursor;
                WFD_list Frm_list = new WFD_list();
                Frm_list.ShowDialog();
                Cursor.Current = Cursors.IBeam;
            }
    J'aimerais pouvoir placer une valeur dans la variable serverName depuis la boîte de dialogue, venant de l'item sur lequel est positionné le focus dans la ListBox de la boite de dialogue.

    Pour cela j'avais envisagé le code suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    private void BTN_ok_Click(object sender, EventArgs e)
            {
                FRM_retrosert.serverName = LB_servers.Items[LB_servers.SelectedIndex];
     
            }
    Bien évidemment la boite de dialogue ne "voit" pas la main form...

    Bref, je suis à la recherche d'une solution qui permet de remonter une valeur.

    D'avance merci

    A +

  2. #2
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 856
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 856
    Points : 52 993
    Points
    52 993
    Billets dans le blog
    6
    Par défaut
    Bon, je me répond à moi même, j'ai fait l'inverse :
    1) déclaration d'une chaine publique dans la boite de dialogue :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
        public partial class WFD_list : Form
        {
            public string serverNameSet;
    2) assignation de cette chaine dans le clic du bouton OK :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
            private void BTN_ok_Click(object sender, EventArgs e)
            {
                serverNameSet = LB_servers.Items[LB_servers.SelectedIndex].ToString();
                MessageBox.Show(serverNameSet);
                this.Close();
             }
    3) reprise de cette info après l'appel de la boite de dialogue :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    private void TB_ServerName_DoubleClick(object sender, EventArgs e)
            {
                Cursor.Current = Cursors.WaitCursor;
                WFD_list Frm_list = new WFD_list();
                Frm_list.ShowDialog();
                serverName = Frm_list.serverNameSet;
                TB_ServerName.Text = serverName;
                Cursor.Current = Cursors.IBeam;
            }
    C'est peut être pas très joli ?

    A +

  3. #3
    Expert éminent Avatar de Graffito
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    5 993
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 993
    Points : 7 903
    Points
    7 903
    Par défaut
    C'est peut être pas très joli ?
    Y'a pas à en rougir .

    Mais le plus propre serait de créér une procédure dédiée retournant le nom du serveur dans la form WFD_list.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    internal DialogResult MyShowDialog(out string ServerName)
    {
       DialogResult Result=ShowDialog() ;
       ServerName= serverNameSet ;
       return Result ;
    }
    ou
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    internal string MyShowDialog()
    {
       return ShowDialog()==DialogResult.OK ? serverNameSet : "" ;
    }
    Sur un autre point qui n'a rien à voir, je te conseillerai de gérer systématiquement les curseurs par 2 procédures static : PushCursor(Cursor) et PopCursor(). Ceci, afin de ne pas avoir de soucis quand on fait des appels imbriqués à des procédures modifiant le curseur.

  4. #4
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 754
    Points
    39 754
    Par défaut
    Citation Envoyé par SQLpro Voir le message
    C'est peut être pas très joli ?
    C'est la façon "standard" de faire ce genre de chose. Les dialogues prédéfinis genre OpenFileDialog/SaveFileDialog fonctionnent d'ailleurs suivant ce principe.

    Par contre, utilise une propriété plutôt qu'un champ... Les champs publics sont généralement considérés comme une mauvaise pratique, parce qu'ils permettent de modifier l'état interne de l'objet sans que tu puisses le contrôler

  5. #5
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 856
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 856
    Points : 52 993
    Points
    52 993
    Billets dans le blog
    6
    Par défaut
    OK pour la propriété... Je ferais mieux la prochaine fois !

    Merci

    A +

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 18/11/2012, 11h25
  2. [XL-2003] ma fonction retourne #VALEUR! lors de la suppression d'une ligne
    Par oracle7556 dans le forum Macros et VBA Excel
    Réponses: 13
    Dernier message: 18/12/2009, 18h17
  3. Réponses: 14
    Dernier message: 22/12/2008, 13h50
  4. Evènement sur le body lors de la fermeture d'une fenêtre
    Par Yaz dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 23/09/2005, 17h54
  5. Arrêter un ttmt en cours, lors de la fermeture d'une fenêtre
    Par teska dans le forum Bases de données
    Réponses: 2
    Dernier message: 20/12/2004, 14h08

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