2015-03-31 69 views
1

我在VS2012上使用c# 在安裝NI Measurement Studio 2013 for Visual Studio 2012之後,我創建了一個窗體並添加了一個切換開關。 在代碼中,我想檢查切換開關狀態是否發生了變化,但是我遇到了問題,我確信可能會問這裏提出的問題,這對其他問題很簡單,但是我被卡住了。 我不斷收到錯誤: 錯誤1事件「NationalInstruments.UI.WindowsForms.Boolean.StateChanged」只能出現在左邊的+ =或 - =有條件地檢查切換開關c#

閱讀其他職位我看到討論如何.NET框架不允許在定義它的類之外直接修改事件,但在這種情況下,我並不試圖修改它,只是得到它的狀態?

我在做什麼錯誤?

感謝,

這裏是我的代碼:

namespace WindowsApplication1 
{ 
    public partial class Form1 : Form 
    { 
     public Form1() 
     { 
      InitializeComponent(); 
     } 

     private void switch1_StateChanged(object sender, ActionEventArgs e) 
     { 
      if (switch1.StateChanged = true) 
      { 
       //do something 
      } 
     } 
    } 
} 
+0

==在if語句中。以下簡短回答1條件。 – 2015-03-31 15:38:09

+0

+ =和 - =用於修改對象。 ==和!=用於比較。 IE'String a =「something」; a + =「else」;''a'是'Something else'。'int b = 1; b ++;'和'b + = 2;'都會增加'b'。 – 2015-03-31 15:39:17

回答

0

錯誤來自於事實,你需要==在C#中進行比較,如:

if (switch1.StateChanged == true) 
{ 
    //do something 
} 

但是,仍然沒有任何意義,因爲StateChanged是一個事件。我沒有料想到會看到這樣的:

public Form1() 
{ 
    InitializeComponent(); 
    StateChanged += switch1_StateChanged; 
} 

private void switch1_StateChanged(object sender, ActionEventArgs e) 
{ 
    //do something 
} 

這將註冊您的StateChanged事件處理程序,當狀態改變事件被激發它裏面的代碼就會被執行。

我想你可能會誤解事件是一個或多個事件發生時執行的函數(委託),而不是某種布爾標誌(事實並非如此)。希望這可以幫助!

+0

Chris,感謝您的回覆。我的問題是我想要兩個。我知道witch1_StateChanged不是布爾標誌。我想用這個事件來觸發一個循環。但我也想改變切換狀態來停止循環。這就是爲什麼我要求進行有條件檢查。我試圖使用的控制器是一個開關關閉狀態或打開關閉狀態。當它改變狀態時我怎麼能觸發一個循環,然後當它再次改變狀態時停止循環?謝謝 – Duke 2015-03-31 17:04:51

+0

@Duke - 我對NI的東西一無所知,但是檢查'ActionEventArgs'中的字段 - 幾乎肯定有一個字段指示當前狀態,然後在'switch1_StateChanged'裏面可以使用'e .WhateverThisIsCalled'內if語句 – 2015-04-01 09:03:55

+0

謝謝,我最終使用它的價值 (switch1.Value) – Duke 2015-04-01 15:59:40

3

您可以使用此:

if(switch1.StateChanged) 
{ 
    //do something 
} 

在C#中使用==比較原始值。

+0

之前,我問了這個問題。仍然會得到相同的錯誤。 – Duke 2015-03-31 17:00:13

+0

嘿杜克,如果你不想要這個 - 你想檢查你的開關的實際狀態是否屬實?爲此你必須使用另一個屬性,比如'switch1.State'。請提供更多有助於解決問題的代碼。 – anon 2015-03-31 20:55:32

0

您的代碼

switch1.StateChanged = true 

是一個賦值(如x = 5)。也許你想你在哪裏得到的比較(x == 5b == true)true或false(這就是爲什麼你可以刪除== true部件。

但由於StateChanged似乎是一個事件,你指定的方法來此盛會, StateChanged之後調用您的私人方法switch1_StateChanged可能已經這樣的方法因此你不需要檢查StateChanged,因爲這種方法只調用狀態何時改變

+0

我想檢查狀態是否改變。 – Duke 2015-03-31 17:01:09

0

我結束了使用此代碼:。 private void switch1_StateChanged(object sender,ActionEventArgs e) {

 if (switch1.Value) 
     { 

     } 
     else 
     { 
      led1.Value = false; 
     } 
    }