2009-12-02 36 views
1

我繼承了KryptonToolkit ListBox控件來獲取SelectedItemChanging事件。c#,listbox,stackOverflow exception

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; 
     } 

    } 

而且我得到了計算器;)例外。也許現在有人想知道這個代碼是什麼?

回答

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異常。