Appel de controle d'un formulaire depuis une autre classe
mr100kv
Messages postés14Date d'inscriptionsamedi 16 septembre 2006StatutMembreDernière intervention19 septembre 2011
-
17 mai 2011 à 17:38
mr100kv
Messages postés14Date d'inscriptionsamedi 16 septembre 2006StatutMembreDernière intervention19 septembre 2011
-
18 mai 2011 à 09:43
Bonjour,
J'ai des soucis avec l'appel d'un controle "Label.text" issue d'une autre classe.
Voici mon formulaire principal appelé "MainForm.cs" (créé automatiquement d'ailleurs)
namespace Toto
{
public partial class Titi : Form
{
public Titi()
{
InitializeComponent();
}
public void Titi_Load(object sender, EventArgs e)
{
// Met le formulaire au premier plan
this.Show();
...
}
}
}
Afin d'être clair dans mon programme, je l'ai découpé en autant de fichier code *.cs que de routines.
J'ai donc un fichier code "test.cs" qui contient le début suivant :
public static class test
{
public static void test()
{
toto.titi.LabelProgression.text="mon texte";
Application.DoEvents();
...
}
}
et là, je me retrouve avec un message d'erreur de type :
Erreur 1 toto.titi.LabelProgression' est inaccessible en raison de son niveau de protection.
J'avoue avoir essayé différentes solutions : mettre du partial partout, mettre du static partout, j'y ai passé quelques heures en vain.
Quelqu'un aurait il la solution...
nb : j'aimerai rester sur ma position en terme de découpage de fichiers *.cs, sinon je vais me retrouver avec un seul fichier "MainFrom.cs" qui risque d'être volumineux et incompréhensible pour d'autres personnes...
Merci d'avance
dodo7263
Messages postés614Date d'inscriptionmercredi 10 septembre 2008StatutMembreDernière intervention 9 février 20176 17 mai 2011 à 21:15
Salut,
Tu peux faire cela en passant une référence de ta forme principale dans le constructeur de la classe ou tu veux récupérer la propriété text de ton label.
Un exemple :
namespace Toto
{
public partial class Titi : Form
{
public Titi()
{
InitializeComponent();
}
// Accesseur en lecture seule
public string strLabelText
{
get {return LabelProgression.Text;}
}
public void Titi_Load(object sender, EventArgs e)
{
// Met le formulaire au premier plan
this.Show();
}
}
}
Dans cette classe disons que tu as ton labelProgression.
Dans l'autre classe tu fais :
public static class test
{
private MainForm m_oMainForm;
// constructeur
public test(MainForm mainForm)
{
m_oMainForm = mainForm
}
public static void test()
{
string UnTest = m_oMainForm.strLabelText;
MessageBox.Show(UnTest); // tu verifies que tu obtiens bien le label
Application.DoEvents();
}
}
Voila en esperant ne pas avoir dit de betises : reprenez moi surtout !
De plus il doit y avoir peut etre plus simple.
@pluche
[b]"Chez ceux qui semblent très vertueux se cachent en général la vanité, l'orgueil, l'intolérance".
mr100kv
Messages postés14Date d'inscriptionsamedi 16 septembre 2006StatutMembreDernière intervention19 septembre 2011 18 mai 2011 à 09:43
Bonjour,
Merci d'avoir répondu à ma demande,
je viens de mettre en place ta proposition, mais en vain.
Ok pour le fichier "MainForm.cs", pas d'erreur :
namespace Toto
{
public partial class Titi: Form
{
public Titi()
{
InitializeComponent();
}
public string strLabelText
{
get { return LabelProgression.Text; }
}
public void MasterTamaris_Load(object sender, EventArgs e)
{
// Met le formulaire au premier plan
this.Show();
Cependant, pour l'autre fichier (test.cs), j'obtient les messages d'erreur suivants :
public static class Test
{
private MainForm m_oMainForm;
// constructeur
public Test(MainForm mainForm)
{
m_oMainForm = mainForm;
}
public static void Test()
{
string UnTest = m_oMainForm.strLabelText;
MessageBox.Show(UnTest); // tu verifies que tu obtiens bien le label
Application.DoEvents();
Erreur 1 Le type ou le nom d'espace de noms 'MainForm' est introuvable (une directive using ou une référence d'assembly est-elle manquante ?)
Erreur 2 Test.m_oMainForm' : impossible de déclarer les membres d'instance dans une classe static
Erreur 3 Les classes static ne peuvent pas avoir de constructeurs d'instance
Pour info, je dvlp avec le Compact Framework 2.0 pour du Windows Mobile.