c#、列表框、stackOverflow 异常

标签 c# winforms listbox selecteditemchanged

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

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

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

    }

我得到了 stackOverflow ;) 异常。也许有人现在这段代码出了什么问题?

最佳答案

您将永远递归地调用方法本身。这些递归调用没有终止条件。这会导致 Stack Overflow。

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

关于c#、列表框、stackOverflow 异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1832120/

相关文章:

.net - 包含更多信息的 TreeView 节点

windows-phone-7 - ListBox的ControlTemplate样式时如何保持虚拟化?

c# - 将字符串转换为 double : input string was not in a correct format

c# - WinForms:为什么在显示文件夹浏览器对话框时出现 InvalidCastException?

c# - 右侧模糊的 WPF 列表框边框

google-chrome - listbox.js 或 pickers.js 未从 sv-se 加载,错误 404

c# - 注意错误而不返回错误值?内部更多信息

c# - stub 模拟 `ISession` 对象时抛出异常

c# - 为什么c#编译器允许返回值类型和变量类型的错误匹配?

c# - 是否有任何传递的方法接受 UTC 的时区偏移量并在 C# 中计算时区?