私は現在、Windows Mobile 6.5 アプリケーションに取り組んでいます。アプリケーションには、シリアル ポートからデータを読み取る Bluetooth 機能があります。データが読み取られると、イベント ハンドラーは下位レベル クラスから UI ビューにデータを渡します。UI は値を更新し、シリアル ポートから読み取った値に応じてボタンの背景色を変更します。ただし、場合によっては、Bluetooth デバイスが範囲外になることがあります。つまり、ハンドヘルド デバイスは、リモートの Bluetooth デバイスからデータを受信できません。
デバイスが範囲内にあり、ハンドヘルド デバイスがシリアル ポートからデータを受信できる場合、受信した値とボタンの背景色は、受信した値に応じて UI で変化します。しかし、デバイスが範囲外に出た後、再び範囲に入った後、何らかの理由でイベント ハンドラーが機能しないため、値のみが変更され、イベント ハンドラーを介してボタンの背景色を変更することはできません。
そのボタンをクリックすると、色が再び変わります。フォーカスがボタンにある場合にのみ色が変わるようです。ラベルにdeviceNameを印刷したため、イベントハンドラーに関連する問題が確認できましたが、イベントハンドラーは起動しません。なぜそれが起こるのか誰にも分かりますか?またはアプローチするより良いアイデア。
ボタンとそのイベント ハンドラーの背景色の変更をリッスンし続けるために使用するコードを次に示します。
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;
}
});
}
}
}
助けてくれてありがとう。
よろしく、
SW ラウ