2013-05-22 7 views
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()»

Как я могу это сделать?

ответ

2

Вы видите это, потому что listener_onGesture - это статический метод, то есть метод не связан с данным экземпляром вашего класса. Однако test - это метод экземпляра, поэтому он привязан к конкретному экземпляру.

Я вижу три варианта, в зависимости от сферы «PDF», но я рекомендую вариант 1:

  • Сделать listener_onGesture методы экземпляра (удалить static ключевое слово)
  • Сделать test статический метод - - это будет работать, только если pdf также является статическим членом.
  • Немного хакерский - найдите экземпляр Form, который вызвал событие, проверив свойства sender и вызывая метод test на этом экземпляре.
+0

Это сработало. Спасибо за вашу помощь, wgraham. – StealthRT

1

listener_onGesture, вероятно, не должно быть статическим. Вы хотите получить доступ к полям экземпляра в этом методе, и вы вызываете его из экземпляра приложения (Form1_Load, где вы ссылаетесь на него, не является статическим методом). Удалив модификатор static из этого метода, вы сможете вызвать нестатический метод.

+0

Спасибо за помощь, а также Servy! – StealthRT

Смежные вопросы