使用事件处理程序声明和初始化 ToolStripMenuItem
Declare and Initialize a ToolStripMenuItem with an Event Handler
我有一个 ToolStripMenuItem,我想用一个字符串、一个图像的空值和一个用于其 Click 事件的事件处理程序来声明和实例化。这是 Intellisense 期望的格式:
ToolStripMenuItem(string text, System.Drawing.Image image, EventHandler onClick).
但是我无法分配事件处理程序,而且我不知道这样做的正确语法。作为解决方法,我在构造函数中分配 .Click 事件,就像这样...
class Timer
{
//The other WinForms objects and my methods are omitted.
private ToolStripMenuItem StartButton = new ToolStripMenuItem("Start Timer");
public Timer()
{
//I want the assignment of StartButton_Click in my declaration and initialization of StartButton, not here.
StartButton.Click += new EventHandler(StartButton_Click);
}
public void StartButton_Click(object sender, EventArgs e)
{
//The logic here is not relevant.
}
}
我尝试了下面的语法,但我一直收到错误消息:
"CS0236 A field initializer cannot reference the non-static field, method, or property 'Timer.StartButton_Click(object, EventArgs)'"
new ToolStripMenuItem("Start Timer", null, new EventHandler(StartButton_Click));
Intelliense 建议我使用格式
EventHandler(void(object,EventArgs)target)
但我不知道如何填写预期的语法 属性。如何编写 StartButton 的声明,以便在单击事件后调用方法 StartButton_Click?
实例化它的正确位置是在构造函数中。一次完成,像这样:
private ToolStripMenuItem StartButton;
public Timer()
{
StartButton = new ToolStripMenuItem("Start Timer", null, StartButton_Click);
}
至于那个编译器错误,你可以read more about it here,虽然它的细节很少。
来自Stack Overflow:您不能使用一个实例变量来初始化另一个实例变量。为什么?因为编译器可以重新排列这些 - 不能保证提醒会在 StartButton_Click 之前初始化,所以上面的行可能会抛出 NullReferenceException。
将方法设为静态,您应该可以开始了。
我有一个 ToolStripMenuItem,我想用一个字符串、一个图像的空值和一个用于其 Click 事件的事件处理程序来声明和实例化。这是 Intellisense 期望的格式:
ToolStripMenuItem(string text, System.Drawing.Image image, EventHandler onClick).
但是我无法分配事件处理程序,而且我不知道这样做的正确语法。作为解决方法,我在构造函数中分配 .Click 事件,就像这样...
class Timer
{
//The other WinForms objects and my methods are omitted.
private ToolStripMenuItem StartButton = new ToolStripMenuItem("Start Timer");
public Timer()
{
//I want the assignment of StartButton_Click in my declaration and initialization of StartButton, not here.
StartButton.Click += new EventHandler(StartButton_Click);
}
public void StartButton_Click(object sender, EventArgs e)
{
//The logic here is not relevant.
}
}
我尝试了下面的语法,但我一直收到错误消息: "CS0236 A field initializer cannot reference the non-static field, method, or property 'Timer.StartButton_Click(object, EventArgs)'"
new ToolStripMenuItem("Start Timer", null, new EventHandler(StartButton_Click));
Intelliense 建议我使用格式
EventHandler(void(object,EventArgs)target)
但我不知道如何填写预期的语法 属性。如何编写 StartButton 的声明,以便在单击事件后调用方法 StartButton_Click?
实例化它的正确位置是在构造函数中。一次完成,像这样:
private ToolStripMenuItem StartButton;
public Timer()
{
StartButton = new ToolStripMenuItem("Start Timer", null, StartButton_Click);
}
至于那个编译器错误,你可以read more about it here,虽然它的细节很少。
来自Stack Overflow:您不能使用一个实例变量来初始化另一个实例变量。为什么?因为编译器可以重新排列这些 - 不能保证提醒会在 StartButton_Click 之前初始化,所以上面的行可能会抛出 NullReferenceException。
将方法设为静态,您应该可以开始了。