我在VS2012上使用c# 在为Visual Studio 2012安装NI Measurement Studio 2013之后,我创建了一个Windows窗体并添加了一个切换开关。 在代码中我想检查切换开关状态是否已经改变,但是我遇到了问题,我确信这里提出的问题可能就像其他问题一样,这对其他问题来说很简单,但我很困难。 我一直收到错误: 错误1事件'NationalInstruments.UI.WindowsForms.Boolean.StateChanged'只能出现在+ =或 - =
的左侧阅读其他帖子我看到有关.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 :(得分:3)
您可以使用:
if(switch1.StateChanged)
{
//do something
}
在C#中,您使用==
来比较原始值。
答案 1 :(得分: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
事件处理程序,并且在触发状态更改事件时将执行其中的代码。
我认为你可能误解了一个事件是一个或多个函数(委托)在事件发生时被执行的事实,而不是它是某种布尔标志(它不是')。希望这有帮助!
答案 2 :(得分:0)
您的代码
switch1.StateChanged = true
是一项任务(如x = 5
)。您可能需要进行比较(x == 5
或b == true
),以获得真或假(这就是为什么您可以删除== true部分。
但是,由于StateChanged似乎是一个事件,因此您将为此事件分配方法,该方法将在StateChanged之后调用。您的私有方法switch1_StateChanged可能已经是这样的方法。因此,您不需要检查StateChanged,因为只有在更改状态时才会调用此方法。
答案 3 :(得分:0)
我最终使用了这段代码: private void switch1_StateChanged(object sender,ActionEventArgs e) {
if (switch1.Value)
{
}
else
{
led1.Value = false;
}
}