我目前正在使用Windows Mobile 6.5應用程序。該應用程序具有從串口讀取數據的藍牙功能。一旦數據被讀取,事件處理程序會將數據從較低級別的類傳遞到UI視圖。 UI將根據從串口讀取的值更新該值並更改按鈕的背景顏色。但是,有時,藍牙設備可能超出範圍。換句話說,手持設備不能從遠程藍牙設備接收任何數據。使用事件處理程序更改按鈕背景問題
當設備在距離範圍內且手持設備可以從串口接收數據時,根據收到的值,接收到的數值和背景顏色會在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劉
你是說事件處理程序沒有觸發,或者你說btn.BackColor的調用沒有任何明顯的效果? – ctacke
設備在超出範圍後再次進入範圍後,背景顏色沒有明顯的效果 –
因此,您在該行上放置了一個斷點,並驗證該行代碼正在執行,是否正確? – ctacke