Bonsoir,
je souhaite rafraichir mes équipements quand il y a un changement d'état, et le problème c'est qu'à aucun moment je ne le fais.
onChange est toujours à null. Dois je l'instancier? Comment? où?
j'ai une classe équipement avec:
j'apelle change dans cette même classe:delegate void changementEtat(Equipement sender);
public event changementEtat onChange;
private void change()
{
if (onChange != null) onChange(this);
}
Quand je change d'état je veux rafraichir mes icônes sur ma form, code de ma form Ecran_2O, dans le load:private void TraitementMessage(string message)
{
lastMessage = message;
Date_Dernier_Message = DateTime.Now;
if (message.EndsWith("!"))
{
//message Ok
TraitementMessageOk(message);
bEtat = true;
}
if (message.EndsWith("?"))
{
//message non Ok
bEtat = false;
}
//
//client.Close();
//client = new TcpClient();
change();
}
private void Fluxentrant(IAsyncResult result)
{
int nbOctetsLus;
try
{
nbOctetsLus = client.GetStream().EndRead(result);
}
catch
{
nbOctetsLus = 0;
}
if (nbOctetsLus != 0)
{
// converti les octets lus en chaine de caractère
string returndata = System.Text.Encoding.ASCII.GetString(inStream, 0, nbOctetsLus);
// on ajout les caractères reçus aux éventuelles trames déjà reçu précédemment
TramesRecues += returndata;
DecompositionMessagesReçus();
}
else
{
bEtat = false;
//Console.WriteLine("Etat=false");
change();
}
Eq.onChange += Icone_onChange;
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 private void Icone_onChange(Equipement sender) { Invoke(new MethodInvoker(Refresh)); }Merci d'avançe.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 private void Icone_Paint(object sender, PaintEventArgs e) { //lequel icone est relacher PictureBox Icone = sender as PictureBox; //liée equipement à l'icone Equipement Eq = Icone.Tag as Equipement; if (Eq.bEtat==true) e.Graphics.DrawRectangle(new Pen(Color.Green, 5), pictureBox1.ClientRectangle); else e.Graphics.DrawRectangle(new Pen(Color.Red, 5), pictureBox1.ClientRectangle); }
Cordialement,
Partager