olibara
Messages postés666Date d'inscriptiondimanche 16 décembre 2007StatutMembreDernière intervention11 mars 2010
-
18 févr. 2008 à 08:37
cs_Bidou
Messages postés5487Date d'inscriptiondimanche 4 août 2002StatutMembreDernière intervention20 juin 2013
-
19 févr. 2008 à 11:01
Bonjour
Désolé j'ai encore une question de debutant en ool et C#
Dans une form j'ai définis une liste
List AddrLst = new List();
Ensuite j'appelle une autre form avec cette liste
Form formxxx = new Xxx.XxxForm(AddrLst);
Et puis j'utilise cette liste
public XxxForm(List<TestMysql.MainForm.AddrList> AddrLst)
{
InitializeComponent();
if (null != AddrLst)
{
BuildCityListFromAddr(AddrLst);
}
}
Jusque là tout va bien SAUF que je me rends compte que j'ai besoin de cette liste a différents endroit dans les classes et fonctions exploitée par cette autre form
Donc je me dis que le plus facile ce serait d'avoir cette liste accessible publiquement plutot que de la trimbaler em parametre
Donc je me demande comment le faire proprement
Suffit-il de la declarer publique ?
public List AddrLst = new List();
Ai je posté cette question dans la bonne rubrique ?
Sinon quelle est elle ?
cs_Bidou
Messages postés5487Date d'inscriptiondimanche 4 août 2002StatutMembreDernière intervention20 juin 201361 18 févr. 2008 à 23:13
C'est un problème d'architecture et pas de C# ça
C'est difficile d'y répondre sans avoir le projet sous la main, mais de passer des paramètres (constructeur, property, etc) me paraît une solution assez bonne (si ça s'enchaîne vraiment trop, il serait alors peut-être bon de revoir les classes et l'idée général du programme).
Mettre en public, c'est généralement une mauvaise solution.
Le champs static peut être utile selon le besoin... à voir.
cs_Bidou
Messages postés5487Date d'inscriptiondimanche 4 août 2002StatutMembreDernière intervention20 juin 201361 18 févr. 2008 à 10:21
Salut,
Si ton objet fait partie de la classe (j'entends par là qu'il est non static) alors tu devras effectivement le trimballer partout où tu en a besoin.
Sinon tu peux le déclarer static (avec le mot clef static...) dans ce cas il sera accessible en faisant seulement MaClass.maVariable (pour autant qu'elle soit publique).
Mais bon, il ne faut pas mettre tout et n'importe quoi en static, on arrive vite à des problèmes de design de l'application et surtout à une programmation qui n'est plus objet....
olibara
Messages postés666Date d'inscriptiondimanche 16 décembre 2007StatutMembreDernière intervention11 mars 20106 18 févr. 2008 à 10:51
Merci Bidou
Precisement, j'essaye de prendre des bonnes habitudes
Donc j'essaye de m'appuyer sur vos conseils
Et ce n'est pas encore bien clair
Ci apres
1- Ma déclaration
2- L'appel de Form2 depuis Form1
3- L'usage dans Form2
Mon probleme c'est que form2 instancie une autre classe qui fait appel a une fonction qui appelle une autre fonction (dans la meme classe) qui elle aurait besoin de ma Liste
Et ca devient un peu profond car j'utilise une source qui n'est pas de moi, que je commence a connaitre mais qui vehicule des concept que je ne maitrise pas encore bien.
Quelle est la maniere la plus propre de faire pour avoir la visibilité de cette liste ?
// 1 Ma declaration ----------------------
namespace RecuTour
{
public partial class MainForm : Form
{
// Declaration de la liste des adresses
public struct AddrList
{
public int AddrId;
public int X; // X ecran
public int Y; // Y ecran
public int order;
public bool active;
};
public List AddrLst = new List();
public class AddrListIdComparer : IComparer
{
public int Compare(AddrList a, AddrList b)
{
return a.AddrId - b.AddrId;
}
};
2- L'appel
Form tspx = new Tsp.TspForm(AddrLst);
tspx.Show();
3- L'usage initial
public TspForm(List<RecuTour.MainForm.AddrList> AddrLst)
{
InitializeComponent();
if (null != AddrLst)
{
BuildCityListFromAddr(AddrLst);
}
}
olibara
Messages postés666Date d'inscriptiondimanche 16 décembre 2007StatutMembreDernière intervention11 mars 20106 18 févr. 2008 à 22:06
Excuse moi je vais essayer d'etre plus clair ou de mieux exprimer mon niveau d'incompétenca actuelle !
J'ai déclaré une liste dans une form (liste pas publique pour le moment)
J'appelle une autre form en donnant cette liste en parametre
Cette autre form appelle une fontion on pazssant cette meme liste et tout va bien
MAIS : Cette ute forme instancie une classe qui contient différentes methodes
La methode A appelle la methode B qui elle devrait avoir aussi la visibilité de la liste et ppeut etre ailleurs encore .....
Je me demande si mon option de passer la liste en parametre etait la bonne ou si je ne devrait pas plutot essayer de rendre cette liste publique, et c'est la que je fais azppel a ta science pour connaitre ton avis sur la maniere la plus simple mais pas trop cracra de proceder !