我是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()'
需要对象引用我该怎么做?
答案 0 :(得分:2)
您看到这是因为listener_onGesture
是一个静态方法 - 意味着该方法与您的类的给定实例无关。但是,test
是一个实例方法 - 因此它的范围限定为特定实例。
我看到三个选项,取决于“pdf”的范围,但我建议选项1:
listener_onGesture
成为实例方法(删除static
关键字)test
成为静态方法 - 仅当pdf
也是静态成员时才会有效。Form
的属性并在该实例上调用sender
方法找到调用该事件的test
实例。答案 1 :(得分:1)
listener_onGesture
可能不应该是静态的。您希望访问此方法中的实例字段,并且您似乎是从应用程序的实例中调用它(Form1_Load
,您当前从中引用它,不是静态方法)。通过从该方法中删除static
修饰符,您就可以调用非静态方法。