2009-12-02 6 views
1

J'ai hérité du contrôle ListBox de KryptonToolkit pour obtenir l'événement SelectedItemChanging.C#, listbox, exception 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); 
     } 
    } 
} 

En forme I poignée événement avec code:

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

    } 

et je me suis Stackoverflow;) Exception. Peut-être que quelqu'un maintenant ce qui est wron avec ce code?

Répondre

6

Vous appelez récursivement la méthode en elle-même pour toujours. Il n'y a pas de condition de fin pour ces appels récursifs. Il en résultera un débordement de pile.

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

merci;) ne sais pas comment je l'ai manqué;) –

2

Vous avez OnSelectedIndexChanged appel dans OnSelectedIndexChanged, il est un appel récursif sans fin.

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

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

Vous vous appelez vous-même. D'où l'exception StackOVerflow.

Questions connexes