Appel de controle d'un formulaire depuis une autre classe

mr100kv Messages postés 14 Date d'inscription samedi 16 septembre 2006 Statut Membre Dernière intervention 19 septembre 2011 - 17 mai 2011 à 17:38
mr100kv Messages postés 14 Date d'inscription samedi 16 septembre 2006 Statut Membre Dernière intervention 19 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

2 réponses

dodo7263 Messages postés 614 Date d'inscription mercredi 10 septembre 2008 Statut Membre Dernière intervention 9 février 2017 6
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".

P.Coehlo (Maktub 2004)/b
0
mr100kv Messages postés 14 Date d'inscription samedi 16 septembre 2006 Statut Membre Dernière intervention 19 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.
0
Rejoignez-nous