Je travaille actuellement sur une application Windows Mobile 6.5. L'application dispose d'une fonction Bluetooth qui lit les données du port série. Une fois les données lues, le gestionnaire d'événements transmet les données de la classe de niveau inférieur à la vue de l'interface utilisateur. L'interface utilisateur mettrait à jour la valeur et modifierait la couleur de fond du bouton en fonction de la valeur lue sur le port série. Cependant, parfois, le périphérique Bluetooth peut être hors de portée. En d'autres termes, le périphérique de poche ne peut recevoir aucune donnée du périphérique Bluetooth distant.Problème lors de la modification du bouton backcolor à l'aide du gestionnaire d'événements
Lorsque le périphérique est à portée et que le périphérique de poche peut recevoir des données du port série, la valeur reçue et la couleur de fond du bouton changent en fonction de la valeur reçue. Cependant, une fois que le périphérique est à nouveau hors de portée, le gestionnaire d'événements ne fonctionne pas pour une raison quelconque. Par conséquent, seule la valeur change, la couleur de fond du bouton ne peut pas changer via le gestionnaire d'événements.
Si je clique sur ce bouton, la couleur changera à nouveau. Il semble que la couleur ne changera que si le bouton est activé. Je peux confirmer que le problème concernant le gestionnaire d'événements parce que j'ai imprimé le deviceName sur l'étiquette, le gestionnaire d'événements ne se déclenche pas. Quelqu'un peut-il savoir pourquoi cela se produit? ou toute meilleure idée à aborder.
Voici le code que j'utilise pour garder l'écoute du changement backcolor du bouton et son gestionnaire d'événements:
Button[] gauges = new Button[MonitoringGauges.Count()]; // declare the button variable
// Create a button for each gauge
.....
.....
.....
// Constructor
for(int k = MonitoringGauges.count -1 ; k >=0 ; k--){ // keep listening to the backcolor change for the button corresponding to the gauge
if(MonitoringGauges[k] !=null){
MonitoringGauges[k].TrainingZoneChanged += new Gauge.TrainingZoneChangedEventHandler(x_TrainingZoneChanged);
}
}
// event handler
void x_TrainingZoneChanged(string deviceName, string macAddress, Color color){
if(!string.IsNullOrEmpty(deviceName) && !string.IsNullOrEmpty(macAddress) && color !=null){
Button btn = gauges.Where(x =>x.Name.equals(deviceName)).First(); // find the correct button for updating the backcolor of the button
if(btn !=null){
btn.Invoke((Action) delegate
{
if(color == Color.Black){
btn.BackColor = Color.LightBlue;
} else{
btn.BackColor = color;
}
});
}
}
}
Merci pour toute aide.
Cordialement,
SW Lau
Etes-vous en train de dire que l'eventhandler ne se déclenche pas, ou dites-vous que l'appel à btn.BackColor n'a pas d'effet notable? – ctacke
L'arrière-plan n'a pas d'effet visible une fois que l'appareil est à nouveau hors plage –
Vous avez donc mis un point d'arrêt sur cette ligne et vous avez vérifié que la ligne de code est en cours d'exécution, n'est-ce pas? – ctacke