C# 创建事件处理程序的问题

C# 创建事件处理程序的问题,c#,events,event-handling,handlers,C#,Events,Event Handling,Handlers,嘿,我对使用事件处理程序和诸如此类的东西还不熟悉,但我在使用它时遇到了一些问题 这在我的命名空间中: public delegate void buttonChange(object sender, EventArgs e); 这是main之前的表单: public static event buttonChange eventButtonChange; 那么我主要有: buttonChangeListener listener = new buttonChangeListener(); e

嘿,我对使用事件处理程序和诸如此类的东西还不熟悉,但我在使用它时遇到了一些问题 这在我的命名空间中:

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指南。我正在大学学习,但向一位家庭成员承诺,我会在夏天为他们开发一些软件,到目前为止进展顺利,但我遇到了困难


谢谢

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

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

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

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

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

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

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

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

谢谢,不,它是一组表单,因此我需要一些东西来更改按钮。。。我之所以这么做是因为我想能够在其他表单上使用按钮时进行口述,而想不出其他方法来实现。无论如何,谢谢你的帮助。谢谢,不,这是一套表格,因此我需要一些东西来更改按钮。。。我之所以这么做是因为我想能够在其他表单上使用按钮时进行口述,而想不出其他方法来实现。无论如何,谢谢你的帮助。