【问题标题】:CheckedListBox throwing argument out of range when it shouldn'tCheckedListBox 在不应该时将参数抛出范围之外
【发布时间】:2013-07-24 02:10:43
【问题描述】:

这是一个 .NET 3.5 Winforms 项目。

我在尝试以编程方式检查复选框列表中的复选框时遇到了一个奇怪的错误。

for (int i = 0; i < 5; i++)
{
    cBListForming.Items.Add((i + 1).ToString());
    cBListForming.SetItemChecked(i, true);
}

所以它添加了 5 个项目,从 1 到 5,然后默认选中添加的复选框。没什么大惊小怪的。

在循环的第一次迭代中,一切正常,但在第二次迭代 (i == 1) 中,SetItemChecked 引发异常。

System.ArgumentOutOfRange {"索引超出范围。必须是 非负数且小于集合的大小。\r\n参数 名称:索引"}

我也可以直观地看到第一个复选框被选中。其余的都不是因为上面的异常。

这真是令人费解。仅出于测试目的,我尝试先添加项目,然后通过第二个循环以编程方式检查它们,但仍然发生相同的问题,即使复选框的计数为 5。

我尝试改用 SetItemCheckState。同样的问题。

我想我可能已经破坏了 CheckedListBox 组件本身,或者我遇到了一些奇怪的框架错误。

非常感谢您对这里发生的事情的任何见解。

【问题讨论】:

  • 我尝试在不添加 cbList 并且没有错误的情况下运行您的代码,所以也许还有其他事情发生,您可能会忽略我在您的 for 循环中运行代码时添加或删除控件
  • 您是否实施了任何事件来捕获 CheckedChanged 或当您更改复选框的 checkState 时会触发的事件?

标签: c# .net winforms checkedlistbox


【解决方案1】:

这很令人沮丧,但实际上它确实是一个框架错误(也许 Winforms Designer 出了点问题)。

在设计器中删除和读取选中的列表框使其工作。没有其他变化。

【讨论】:

  • 感谢您的帖子。这与我遇到的问题完全相同。由于布局原因,我在设计器上复制了 CheckedListBox。虽然计数表示列表中的项目更多,但它在索引计数周围引发了异常,我从中复制它的框可能有。
【解决方案2】:

尝试以下方法:

for (int i = 0; i < 5; i++)
{
    cBListForming.Items.Add((i + 1).ToString(), true);
}

【讨论】:

  • 类似问题。第一个被添加(并且也被检查),但在第二次迭代时抛出参数超出范围。
  • 能否请您提及用于此控件的任何属性/事件?
【解决方案3】:

我假设“cBListForming”是一个复选框列表。

检查您拥有的复选框列表的数量。这可能是问题的原因。

cBListForming.Count();

【讨论】:

  • 请阅读问题.. 我已经明确说明了以下内容:即使复选框的计数是 5。.
  • 对不起。我没有注意到粗体字。我的错。只想问一下,你是用“复选框列表”还是控件CheckListboxmsdn.microsoft.com/en-us/library/…
猜你喜欢
  • 2023-03-22
  • 1970-01-01
  • 2013-11-18
  • 1970-01-01
  • 1970-01-01
  • 2012-05-04
  • 1970-01-01
  • 1970-01-01
  • 2022-06-11
相关资源
最近更新 更多