在侦听器函数中调用函数

时间:2013-05-22 20:30:17

标签: c# function listener

我是C#世界的新手,我正在尝试使用以下代码调用侦听器中的另一个函数:

    private void Form1_Load(object sender, EventArgs e)
    {
        listener = new GestureListener(100);
        listener.onGesture += listener_onGesture;
        controller = new Controller(listener);
    }

    static void listener_onGesture(Gesture gesture)
    {
        string gestures = "";

        foreach (Gesture.Direction direction in gesture.directions) {
            gestures = direction.ToString();
        }

        int howManyFingers = gesture.fingers;

        if (gestures == "Left" && howManyFingers == 2) {
            test();
        } else {
            Console.WriteLine("gestured " + gestures + " with " + gesture.fingers + " fingers.");
        }
    }

    private void test()
    {
        pdf.gotoNextPage();
    }

然而,当我这样做时似乎没有用。它在 test(); 行上给出的错误是:

非静态字段,方法或属性'LeapDemoTest.Form1.test()'

需要对象引用

我该怎么做?

2 个答案:

答案 0 :(得分:2)

您看到这是因为listener_onGesture是一个静态方法 - 意味着该方法与您的类的给定实例无关。但是,test是一个实例方法 - 因此它的范围限定为特定实例。

我看到三个选项,取决于“pdf”的范围,但我建议选项1:

  • 使listener_onGesture成为实例方法(删除static关键字)
  • 使test成为静态方法 - 仅当pdf也是静态成员时才会有效。
  • 有点hackish - 通过检查Form的属性并在该实例上调用sender方法找到调用该事件的test实例。

答案 1 :(得分:1)

listener_onGesture可能不应该是静态的。您希望访问此方法中的实例字段,并且您似乎是从应用程序的实例中调用它(Form1_Load,您当前从中引用它,不是静态方法)。通过从该方法中删除static修饰符,您就可以调用非静态方法。