2013-05-22 2 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은 인스턴스 메소드이므로 특정 인스턴스로 범위가 지정됩니다.

  • listener_onGesture
  • test 정적 메서드 확인 인스턴스 메서드합니다 (static 키워드를 제거)하십시오 : -

    나는 "PDF"의 범위에 따라 세 가지 옵션을 볼 수 있지만 내가 옵션 1을 권장 - pdf도 정적 멤버 인 경우에만 작동합니다.

  • 다소 hackish - sender의 속성을 검사하고 해당 인스턴스에서 test 메서드를 호출하여 이벤트를 호출 한 Form 인스턴스를 찾습니다.
+0

그게 효과가 있어요. 도와 줘서 고마워, 웨 그햄 – StealthRT

1

listener_onGesture은 정적이어서는 안됩니다. 이 메서드 내에서 인스턴스 필드에 액세스하려고하고 응용 프로그램 인스턴스 내에서 인스턴스 필드를 호출하려고합니다 (Form1_Load, 현재 참조하는 곳은 정적 메서드가 아닙니다). 해당 메서드에서 static 수정자를 제거하면 비 정적 메서드를 호출 할 수 있습니다.

+0

도와 주셔서 감사합니다. – StealthRT

관련 문제