创建事件处理程序时遇到麻烦

时间:2013-06-19 12:36:05

标签: c# events event-handling handlers

嘿,我是使用事件处理程序之类的新手,我遇到了一些问题 这是我的命名空间:

public delegate void buttonChange(object sender, EventArgs e);

这是main之前的表格:

public static event buttonChange eventButtonChange;

然后在主要内容中我有:

buttonChangeListener listener = new buttonChangeListener();
eventButtonChange += new buttonChange(buttonChangeNeeded);

然后是一个程序:

void buttonChangeNeeded(object sender, buttonChangeArgs e)
    {
        // The Program has moved a state forward
        switch (e.TheNumber)
        {
            case 1:
                // Probe has been purged
                this.SetBtnAutoCycle1(true);
                break;
            case 2:
                //First Auto-Cycle Complete
                this.SetBtnPerf(true);                    
                break;
            case 3:
                //Performance Test Complete
                this.SetBtnAutoCycle2(true);
                break;
            case 4:
                //Second Auto-Cycle Complete
                this.SetBtnReport(true);
                break;
            default:
                break;
        }

然后最后是一个单独的类:

public class buttonChangeArgs : EventArgs
{
    public readonly int TheNumber;

    public buttonChangeArgs(int num)
    {
        TheNumber = num;
    }
}
public class buttonChangeListener
{
    public void changeTheButton(object o, buttonChangeArgs e)
    {
        Console.WriteLine(
            "The button should move down too: {0}",
            e.TheNumber);
    }
}

老实说,我已经浏览过一些教程,并试图模仿它们但是并不真正理解它们,包括MSDN指南,我在大学学习但承诺我的家庭成员我会开发一些软件他们整个夏天到目前为止它都很顺利,但我碰到了一堵砖墙。

由于

1 个答案:

答案 0 :(得分:1)

您已使用类型EventArgs的第二个参数声明了一个委托。但是在您的主要部分中,您使用不接受EventArgs但不接受其子类的处理程序订阅它。编译器无法在此处进行转换。

您可以通过声明委托接受您的特定参数来解决此问题:

public delegate void buttonChange(object sender, buttonChangeArgs e);

除此之外,您的Main很可能是静态方法(我假设您正在编写控制台应用程序)。在这种情况下,buttonChangeNeeded的使用无效,因为它不是静态的(至少从我们看到的内容)。