2009-12-02 4 views
1

KryptonToolkit ListBox 컨트롤을 상속하여 SelectedItemChanging 이벤트를 가져 왔습니다. 형태에서C#, listbox, stackOverflow 예외

public class CPListBox : KryptonListBox 
{  
    public event CancelEventHandler SelectedIndexChanging; 

    protected virtual void OnSelectedIndexChanging(CancelEventArgs e) 
    { 
     SelectedIndexChanging(this, e); 
    } 

    protected override void OnSelectedIndexChanged(EventArgs e) 
    {   
     CancelEventArgs cArgs = new CancelEventArgs(); 
     OnSelectedIndexChanged(cArgs); 

     if(!cArgs.Cancel) 
     { 
      base.OnSelectedIndexChanged(e); 
     } 
    } 
} 

나는 코드 이벤트를 처리 :

void UsersListBoxSelectedIndexChanging(object sender, CancelEventArgs e) 
    { 
     if(_presenter.CurrentUser.IsModified) 
     { 
      MessageBox.Show("Nie zapisales zmian!"); 
      e.Cancel = true; 
     } 

    } 

그리고 I에 유래있어) 예외. 어쩌면 지금 누군가가이 코드를 가진 wron입니까?

답변

6

당신은 재귀 적으로 메소드 자체를 영원히 호출하고 있습니다. 이러한 재귀 호출에는 종료 조건이 없습니다. 스택 오버플로가 발생합니다.

protected override void OnSelectedIndexChanged(EventArgs e) 
{      
     CancelEventArgs cArgs = new CancelEventArgs(); 
     OnSelectedIndexChanged(cArgs); // Clearly calling yourself indefinitely. 
     //... 
} 
+1

감사합니다;) 내가 어떻게 그것을 놓칠 수 있는지 모르겠다;) –

2

당신은 OnSelectedIndexChangedOnSelectedIndexChanged 전화를 가지고, 그것은 무한 재귀 호출입니다.

3
protected override void OnSelectedIndexChanged(EventArgs e) 
     {      
       CancelEventArgs cArgs = new CancelEventArgs(); 
       //Next line!! 
       OnSelectedIndexChanged(cArgs); 

       if(!cArgs.Cancel) 
       { 
         base.OnSelectedIndexChanged(e); 
       } 
     } 

자신을 전화하고 있습니다. 따라서 StackOVerflow 예외입니다.