我有一个ToolStripMenuItem,我想声明并使用String实例化,图像的空值和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字段初始值设定项不能引用非静态字段,方法或属性' Timer.StartButton_Click(object,EventArgs)'"
new ToolStripMenuItem("Start Timer", null, new EventHandler(StartButton_Click));
Intelliense建议我使用格式
EventHandler(void(object,EventArgs)target)
但我不知道如何填写预期的语法属性。如何编写StartButton声明,以便在Click事件后调用方法StartButton_Click?
答案 0 :(得分:0)
实例化它的正确位置在构造函数中。一下子就这样做,就像这样:
private ToolStripMenuItem StartButton;
public Timer()
{
StartButton = new ToolStripMenuItem("Start Timer", null, StartButton_Click);
}
至于那个编译器错误,你可以read more about it here,虽然它的细节很少。
答案 1 :(得分:0)
From Stack Overflow:您无法使用实例变量初始化另一个实例变量。为什么?因为编译器可以重新排列这些 - 不能保证在StartButton_Click之前初始化提醒,所以上面的行可能会抛出NullReferenceException。
让方法保持静止,你应该好好去。