1

我是 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()”需要对象引用

我怎样才能做到这一点?

4

2 回答 2

2

您看到这是因为listener_onGesture它是一个静态方法——意思是,该方法与您的类的给定实例无关。但是,test它是一个实例方法——所以它的作用域是特定的实例。

我看到三个选项,具体取决于“pdf”的范围,但我推荐选项 1:

  • listener_onGesture一个实例方法(去掉static关键字)
  • 制作test一个静态方法——这只有在pdf也是一个静态成员时才有效。
  • 有点骇人听闻——Form通过检查sender's 的属性找到调用事件的实例并调用该test实例上的方法。
于 2013-05-22T20:34:04.357 回答
1

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

于 2013-05-22T20:32:49.400 回答