2012-05-11 175 views
1

因此,我希望能夠在標籤上顯示消息而無需點擊標籤。顯示不點擊的標籤消息

public void servicestatus_Click_1(object sender, EventArgs e) 
    { 
     var mavbridgeservice = new System.ServiceProcess.ServiceController("MavBridge"); 

     if (mavbridgeservice.Status == ServiceControllerStatus.Running) 
     { 
      servicestatus.Text = ("The service is running!"); 
     } 

     else 
     { 
      servicestatus.Text = "The service is stopped!"; 
     } 
    } 

我綁放(NULL,NULL)在(對象發件人,EventArgs的),但是這給了錯誤,我不知道爲什麼。我那裏的代碼與任何點擊沒有任何關聯。

+0

從你身在何處爲解釋這可能deosnt火試圖改變標籤的價值? – Habib

+0

你能解釋一下好嗎?應該沒有問題。 發生了哪個錯誤? –

+0

當我點擊時,標籤改變,它完美地發現。我只是希望它改變,而用戶不必點擊標籤 – heinst

回答

5

您顯然希望顯示服務器的狀態。

但是,當用戶請求更新時,您不希望更改它,您希望它自動更改嗎?

您有兩種選擇。 編輯:我現在看到選項#1不會工作,您將需要下面的計時器選項。我刪除了選項#1

選項#2 如果它在您的程序外更改,那麼您可以添加一個計時器,每秒鐘或兩秒鐘提示一次,具體取決於您希望更新用戶的速度,並且在此期間添加您的代碼設置標籤

public Timer t = new Timer(); 

然後在您的主窗體構造函數中,在InitializeComponent();線在timer.Tick事件添加此

t.Interval = 1000; 
    t.Tick+=new EventHandler(t_Tick); 
    t.Enable=true; 

運行代碼來確定狀態(目前什麼是你的標籤的click事件)

void t_Tick(object sender, EventArgs e) 
    { 
     var mavbridgeservice = new System.ServiceProcess.ServiceController("MavBridge"); 

     if (mavbridgeservice.Status == ServiceControllerStatus.Running) 
     { 
      servicestatus.Text = ("The service is running!"); 
     } 

     else 
     { 
      servicestatus.Text = "The service is stopped!"; 
     } 
    } 
+0

我添加了一個更新,第一個選項不會爲你工作,因爲你沒有設置狀態,你只是檢查它,在這種情況下,我認爲計時器是真的要走的路。 –

+0

不要忘記提及不要把這裏面的點擊事件,或者它仍然只會發生在點擊,把這個無處不在,否則你寫mavbridgeservice.Status == ServiceControllerStatus.Running 並完全廢棄點擊事件代碼 – RhysW

+0

@RhysW我刪除選項#1,以便您的評論不再有效....對不起:) –

1

中的參數把空空事件處理程序給你一個錯誤,因爲代碼需要知道什麼發送了這個請求(對象,在這種情況下是標籤),它使用的事件參數(e)你不能將這些請求清空,它需要它們起作用。這就是它出錯的原因。

還當你點擊,因爲你還沒有鏈接的標籤,單擊事件與此代碼(click_1顯示有一個傳統的點擊其鏈接到你不在使用)