2012-09-10 5 views
0

이 항목은 어디서나 볼 수 있지만이 항목은 찾을 수 없습니다. 내 응용 프로그램을 위해 만든 모든 창을 저장하는 데 사용되는 클래스가 있습니다. 내가하려는 것은 하나도 존재하지 않는다면 새로운 창을 만들고 그것에 몇 가지 이벤트를 첨부하는 것입니다. 문제는 이벤트가 오류를 던지고 있다는 것입니다.새 EventHandler에서 비 정적 필드, 메서드 또는 속성 오류에 대한 개체 참조가 필요합니다.

아래의 코드 스 니펫은 이벤트 발생시 새 창을 만들 예정인 클래스입니다. 아래에는 두 개의 이벤트 핸들러 정의가 있습니다. 이들은 모두 같은 학급에 있습니다. 두 이벤트 핸들러

void window_Closing(object sender, System.ComponentModel.CancelEventArgs e) 
{ 
    throw new NotImplementedException(); 
} 

void window_Closed(object sender, EventArgs e) 
{ 
    throw new NotImplementedException(); 
} 

에 대한

Window window = FindWindow(windowId); 
if (window == null) 
{ 
    window = new Window(); 
    window.Closing += new System.ComponentModel.CancelEventHandler(window_Closing); 
    window.Closed += new EventHandler(window_Closed); 
    _winDict.Add(windowId, window); 
} 
window.Owner = Application.Current.MainWindow; 
window.Title = title; 
window.Content = guc; 
window.SizeToContent = SizeToContent.WidthAndHeight; 
window.ResizeMode = ResizeMode.NoResize; 
window.ShowInTaskbar = false; 

코드는 희망이이 문제를 디버깅 나를 도울 수있는 충분한 정보입니다. 사전에

감사합니다.

답변

1

이 코드 조각이 정적 메서드 내에 나타나면 'this'포인터가 없으므로 window_Closing 및 window_Closed 메서드에 액세스 할 수 없습니다.

window_closed 및 window_closing를 정적으로 만들고 컴파일할지 확인해보십시오.하지만 'this'포인터도 없다는 경고를받습니다.

아마도 '실제'수정은 메서드를 비 정적으로 만드는 것이며 현재의 정적 메서드에서는 클래스의 인스턴스를 만든 다음 해당 비 정적 메서드를 호출합니다.

은 (참고 : 컴파일이 조각 시도하지)이 매우 내 상황이었다

class SomeClass 
{ 
    static void CurrentFunc() 
    { 
     var someClass = new SomeClass(); 
     someClass.NewFunc(); 
    } 

    private void NewFunc() 
    { 
     Window window = FindWindow(windowId); 
     if (window == null) 
     { 
      window = new Window(); 
      window.Closing += new System.ComponentModel.CancelEventHandler(window_Closing); 
      window.Closed += new EventHandler(window_Closed); 
      _winDict.Add(windowId, window); 
     } 
     window.Owner = Application.Current.MainWindow; 
     window.Title = title; 
     window.Content = guc; 
     window.SizeToContent = SizeToContent.WidthAndHeight; 
     window.ResizeMode = ResizeMode.NoResize; 
     window.ShowInTaskbar = false; 
    } 

    private void window_Closing(object sender, System.ComponentModel.CancelEventArgs e) 
    { 
     throw new NotImplementedException(); 
    } 

    private void window_Closed(object sender, EventArgs e) 
    { 
     throw new NotImplementedException(); 
    } 
} 
+0

샘플을 보내 주셔서 감사합니다. 올바른 방향으로 나를 안내해주십시오. – Seb

2

이벤트 처리기를 정적 메서드로 설정하는 방법이 있습니까? 그렇다면 'window_closing'및 'window_closed'인스턴스 메서드에 액세스 할 수 없습니다.

+0

합니다. 고맙습니다. – Seb