c#,listbox,stackOverflow异常

Adr*_*fin 1 c# listbox selecteditemchanged winforms

我继承了KryptonToolkit ListBox控件来获取SelectedItemChanging事件.

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);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

在表单中,我使用代码处理事件:

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

    }
Run Code Online (Sandbox Code Playgroud)

我得到stackOverflow;)例外.也许有人现在这个代码是什么wron?

Meh*_*ari 6

您将永远以递归方式调用该方法.这些递归调用没有终止条件.它会导致Stack Overflow.

protected override void OnSelectedIndexChanged(EventArgs e)
{                       
       CancelEventArgs cArgs = new CancelEventArgs();
       OnSelectedIndexChanged(cArgs); // Clearly calling yourself indefinitely.
       //...
}
Run Code Online (Sandbox Code Playgroud)