Variables entre formulaires (deux fichiers distincts)

Messages postés
50
Date d'inscription
lundi 4 février 2013
Statut
Membre
Dernière intervention
12 mars 2015
- - Dernière réponse : krimog
Messages postés
1860
Date d'inscription
lundi 28 novembre 2005
Statut
Modérateur
Dernière intervention
14 février 2015
- 18 juil. 2013 à 10:14
Bonjour,

Encore une fois, je sollicite votre aide amis Csharpeurs.

Je dispose de deux formulaires bien distincts, Couveuse.cs (form principal) et Param.cs.

Ce que je souhaite obtenir est plutôt simple. Le formulaire principal dispose de variables pour gérer plusieurs paramètres de l'application. Étant une gestion de couveuse, je m'occupe de la température, de la durée d'incubation et autres petites choses du genre. J'ai ajouté un toolstripmenu par lequel je passe pour appeler ma form secondaire "Param.cs" qui devrait, si c'était fonctionnel, me permettre de modifier les variables de la form principale citée avant.

Voici ma Form Param.cs :
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace Couveuse
{
    public partial class Param : Form
    {
        public Param()
        {
            InitializeComponent();
        }

        #region Variables de paramétrage de l'application

        int iTemperatureIncubation, iTempsIncubation;
        int iPremierRetournement, iSecondRetournement;
        int iIntervalleVentilation;

        #endregion

        private void btnAppliquerParam_Click(object sender, EventArgs e)
        {
            iTemperatureIncubation = Convert.ToInt32(this.tbxSeuilTemp.Text);
            iTempsIncubation = Convert.ToInt32(this.tbxTempsIncubation.Text);
            iPremierRetournement = Convert.ToInt32(this.tbxPremierRetournement.Text);
            iSecondRetournement = Convert.ToInt32(this.tbxSecondRetournement.Text);
            iIntervalleVentilation = Convert.ToInt32(this.tbxIntervalleVentilation.Text);
        }
    }
}


Et puis maintenant, le début de la form principale :

namespace Couveuse
{
    public partial class Couveuse : Form
    {
        public Couveuse()
        {
            InitializeComponent();
        }


Le reste du code étant un pavé, je préfère éviter de coller absolument tout. Cela dit, n'hésitez pas à me demander de rajouter la suite s'il vous manque quelque chose.

Bref, maintenant la question que je me pose est "comment faire pour transmettre ces paramètres à mon formulaire principal au moment où l'utilisateur clique sur le bouton du formulaire Param.cs ?"

Auriez-vous une idée ou deux ?

D'avance, merci :)


Cordialement, Gaedarr.
Afficher la suite 

8 réponses

Messages postés
1860
Date d'inscription
lundi 28 novembre 2005
Statut
Modérateur
Dernière intervention
14 février 2015
30
0
Merci
C'est simple : Couveuse doit avoir une référence sur Param, et tes paramètres doivent être disponibles en lecture depuis une autre classe du même assembly (donc public ou internal).

Exemple :
// Dans Param
public int TemperatureIncubation
{ get { return iTemperatureIncubation; } }

// Dans Couveuse
private Param parametres;
private void OpenParam()
{
    parametres = new Param();
    parametres.ShowDialog();
    MessageBox.Show(parametres.TemperatureIncubation.ToString());
}


Krimog : while (!(succeed = try())) ;
- Nous ne sommes pas des décodeurs ambulants. Le style SMS est prohibé. -
Commenter la réponse de krimog
Messages postés
13978
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
15 novembre 2019
319
0
Merci
Bonjour, tu as différentes méthodes exposées ou

Whismeril
Commenter la réponse de Whismeril
Messages postés
50
Date d'inscription
lundi 4 février 2013
Statut
Membre
Dernière intervention
12 mars 2015
0
Merci
Tout d'abord, merci pour la réponse plutôt rapide :)

Dans mon formulaire Couveuse, j'ai des variables publiques en global (j'en ai encore d'autres), donc normalement accessibles.
        #region Variables Chauffage

        public int iSeuil = 217;
        public int iTemperature = 0;

        #endregion


Ensuite, ce que je cherche à faire, c'est modifier le contenu des variables du formulaire Couveuse.cs en passant par le formulaire Param.cs.

Par exemple, l'utilisateur entre 38 dans le textbox tbxSeuilTemp de Param.cs, il faudrait qu'au moment où il clique sur le bouton appliquer, que la valeur récupérée du textbox soit envoyée à la variable iSeuil de Couveuse.cs.

Donc si je ne me plante pas, ce serait ainsi ? :
// Dans Couveuse
public int SeuilTemperature
{
   get
   { 
      return iSeuilTemperature;
   }
}

// Dans Param
private Couveuse parametres;

private void OpenCouveuse()
{
    parametres = new Couveuse();
    parametres.ShowDialog();
    return parametres.TemperatureIncubation;

    // possible ?
}



Cordialement, Gaedarr.
Commenter la réponse de Gaedarr
Messages postés
1860
Date d'inscription
lundi 28 novembre 2005
Statut
Modérateur
Dernière intervention
14 février 2015
30
0
Merci
Déjà, ne mets jamais un champ en public. Passe toujours par une propriété.

Ton scénario tel que je l'ai compris :
Tu lances ton application
Le formulaire Couveuse s'ouvre
Sur ce formulaire, tu cliques sur un bouton pour ouvrir une popup Param.
Là, tu as des textBox que tu remplis pour définir tes valeurs.
Ensuite, lorsque tu cliques sur Appliquer, tu fermes le formulaire Param et les valeurs sont mises à jour sur Couveuse.

Si c'est bien ça, il faut utiliser mon code. Sinon, merci d'expliquer clairement ton scénario.

Krimog : while (!(succeed = try())) ;
- Nous ne sommes pas des décodeurs ambulants. Le style SMS est prohibé. -
Commenter la réponse de krimog
Messages postés
50
Date d'inscription
lundi 4 février 2013
Statut
Membre
Dernière intervention
12 mars 2015
0
Merci
C'est bien ça Krimog, je vais voir pour implémenter ce que tu m'as proposé, je donne des nouvelles dès que possible :)


Cordialement, Gaedarr.
Commenter la réponse de Gaedarr
Messages postés
224
Date d'inscription
vendredi 26 novembre 2010
Statut
Membre
Dernière intervention
11 juin 2013
2
0
Merci
Bonjour,

Tu pourrais aussi passer tes variables en référence (et non en copie) à l'instanciation de Param.cs. Les modifications apportées dans Param.cs devraient donc impacter directement les variables instanciées dans Couveuse.cs
Ensuite il suffit de créer un événement (bouton clic, form fermé) sur Couveuse.cs et de mettre à jour tes champs à ce moment la.
Commenter la réponse de cs_L0ci
Messages postés
735
Date d'inscription
jeudi 19 décembre 2002
Statut
Membre
Dernière intervention
22 novembre 2016
3
0
Merci
Bonsoir,

Tu peux également utiliser une classe static pour centraliser et stocker tes paramètres tout le long de ton application (cela t’évitera de devoir faire communiquer tes deux classes).

++

../\_/\..
.( o.o ). ~ ElGuevel ~
..> - <..
Commenter la réponse de elguevel
Messages postés
1860
Date d'inscription
lundi 28 novembre 2005
Statut
Modérateur
Dernière intervention
14 février 2015
30
0
Merci
@elguevel : les propriétés static sont à éviter. Si des données n'ont pas besoin d'être accessibles depuis n'importe où dans l'application, elles ne doivent pas l'être.
En plus, si tu veut gérer plusieurs fenêtres indépendantes, tu ne peux pas utiliser de classe static.

Krimog : while (!(succeed = try())) ;
- Nous ne sommes pas des décodeurs ambulants. Le style SMS est prohibé. -
Commenter la réponse de krimog