Accéder à mes textbox

Fermé
moi67671 Messages postés 2 Date d'inscription mardi 10 décembre 2013 Statut Membre Dernière intervention 10 décembre 2013 - 10 déc. 2013 à 08:53
mli07 Messages postés 5 Date d'inscription lundi 16 décembre 2013 Statut Membre Dernière intervention 16 décembre 2013 - 16 déc. 2013 à 09:16
Bonjour

J'ai écris un programme (plutôt commencé) avec 2 textbox et un compteur. Dans la première textbox s'affiche le compteur quand il est pair, dans la seconde lorsqu'il est impair.

C'est pas terminé mais à partir d'une classe j'arrive pas à accéder à mes textbox. Ça marque qu'elles n'existent pas dans le contexte actuel en les soulignant en rouge.

Voici le code que j'ai déjà écris :

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading;
using System.Windows.Forms;

namespace WindowsFormsApplicationThreadModeGraphique
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
public static int compteur;
Thread ThreadA = new Thread(new ThreadStart(Evenements.TacheA));
Thread ThreadB = new Thread(new ThreadStart(Evenements.TacheB));

private void buttonDepart_Click(object sender, EventArgs e)
{
ThreadA.Start();
ThreadB.Start();
}

}



public class Evenements
{
public static int compteur;
public static void TacheA()
{
if (compteur < 20)
compteur++;
else
compteur = 0;
}

public static void TacheB()
{
if (compteur % 2 == 0)
textBoxPair.Text = Convert.ToString(compteur);
else
textBoxImpair.Text = Convert.ToString(compteur);

}

}
}

Est ce que quelqu'un peut m'expliquer pourquoi ça souligne et ce que je dois faire ?
Merci d'avance

2 réponses

Bonjour,

Click sur ta textBox regarde les propriétés et change "Modifiers" de private à public.

Bon dev.

Atloka
0
mli07 Messages postés 5 Date d'inscription lundi 16 décembre 2013 Statut Membre Dernière intervention 16 décembre 2013 2
Modifié par mli07 le 16/12/2013 à 09:44
Bonjour,

Tu vas rencontrer un problème d'opération inter-thread en procédant de la sorte...

Même si tu rends t'es textboxs publics il va falloir passer ton objet form1 dans t'es classes.

Ne rend pas t'as classe Evenements static, il va falloir passer ton objet Form1 dans le constructeur.

Voici le code un peu modifier


// --------------------------

public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        public void ModifierCompteur(int compteur)
        {
            if (compteur % 2 == 0)
                textBoxPair.Text = Convert.ToString(compteur);
            else
                textBoxImpair.Text = Convert.ToString(compteur);
        }

        private void buttonDepart_Click(object sender, EventArgs e)
        {

            // Un seul thread suffit
            Evenements evenements = new Evenements(this);
            Thread th = new Thread(new ThreadStart(evenements.TachePrincipal));
        }
    }

// ----------------------------------------------

public class Evenements
    {

        private int compteur;
        private Form1 form1;
        private delegate void InvokeCompteur(int compteur);

        public Evenements(Form1 form)
        {
            this.form1 = form;
        }

        public void TachePrincipal()
        {
            if (compteur < 20)
                compteur++;
            else
                compteur = 0;
            //
            form1.Invoke(new InvokeCompteur(form1.ModifierCompteur), new object[] { compteur });
        }
    }



Le invoke permet d'appeler des méthodes ou d'un réaliser des changements sur des objets qui ne sont pas dans le même fil de processus.
0