Variables entre formulaires (deux fichiers distincts)
Gaedarr
Messages postés49Date d'inscriptionlundi 4 février 2013StatutMembreDernière intervention12 mars 2015
-
10 juin 2013 à 11:08
krimog
Messages postés1860Date d'inscriptionlundi 28 novembre 2005StatutMembreDernière intervention14 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 ?"
krimog
Messages postés1860Date d'inscriptionlundi 28 novembre 2005StatutMembreDernière intervention14 février 201549 10 juin 2013 à 15:17
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é. -
Gaedarr
Messages postés49Date d'inscriptionlundi 4 février 2013StatutMembreDernière intervention12 mars 2015 10 juin 2013 à 15:53
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 ?
}
krimog
Messages postés1860Date d'inscriptionlundi 28 novembre 2005StatutMembreDernière intervention14 février 201549 10 juin 2013 à 16:48
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é. -
Vous n’avez pas trouvé la réponse que vous recherchez ?
cs_L0ci
Messages postés224Date d'inscriptionvendredi 26 novembre 2010StatutMembreDernière intervention11 juin 20137 11 juin 2013 à 09:36
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.
elguevel
Messages postés718Date d'inscriptionjeudi 19 décembre 2002StatutMembreDernière intervention22 novembre 20163 17 juil. 2013 à 22:24
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).
krimog
Messages postés1860Date d'inscriptionlundi 28 novembre 2005StatutMembreDernière intervention14 février 201549 18 juil. 2013 à 10:14
@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é. -