1

I inherited KryptonToolkit ListBox control to get SelectedItemChanging event.

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

In form I handle event with code:

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

    }

And I got stackOverflow ;) Exception. Maybe someone now what is wron with this code?

Adrian Serafin
  • 7,665
  • 5
  • 46
  • 67

3 Answers3

6

You're recursively calling the method in itself forever. There's no terminating condition for these recursive calls. It'll result in Stack Overflow.

protected override void OnSelectedIndexChanged(EventArgs e)
{                       
       CancelEventArgs cArgs = new CancelEventArgs();
       OnSelectedIndexChanged(cArgs); // Clearly calling yourself indefinitely.
       //...
}
Mehrdad Afshari
  • 414,610
  • 91
  • 852
  • 789
3
protected override void OnSelectedIndexChanged(EventArgs e)
        {                       
                CancelEventArgs cArgs = new CancelEventArgs();
                //Next line!!
                OnSelectedIndexChanged(cArgs);

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

You're calling yourself. Hence the StackOVerflow exception.

Yann Schwartz
  • 5,954
  • 24
  • 27
2

You have OnSelectedIndexChanged call within OnSelectedIndexChanged, it's an endless recursive call.

o.k.w
  • 25,490
  • 6
  • 66
  • 63