【问题标题】:c#, listbox, stackOverflow exceptionc#, listbox, stackOverflow 异常
【发布时间】:2009-12-02 10:45:53
【问题描述】:

我继承了 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 ;) 异常。也许有人现在这个代码有什么问题?

【问题讨论】:

    标签: c# winforms listbox selecteditemchanged


    【解决方案1】:

    您将永远递归地调用该方法本身。这些递归调用没有终止条件。这会导致堆栈溢出。

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

    【讨论】:

      【解决方案2】:
      protected override void OnSelectedIndexChanged(EventArgs e)
              {                       
                      CancelEventArgs cArgs = new CancelEventArgs();
                      //Next line!!
                      OnSelectedIndexChanged(cArgs);
      
                      if(!cArgs.Cancel)
                      {
                              base.OnSelectedIndexChanged(e);
                      }
              }
      

      你在给自己打电话。因此 StackOverflow 异常。

      【讨论】:

        【解决方案3】:

        您在OnSelectedIndexChanged 中有OnSelectedIndexChanged 调用,这是一个无休止的递归调用。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2012-06-21
          • 1970-01-01
          • 1970-01-01
          • 2015-10-28
          • 2018-01-03
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多