【问题标题】:ArgumentOutOfRangeException when setting selected index of listbox in KeyDown event在 KeyDown 事件中设置列表框的选定索引时出现 ArgumentOutOfRangeException
【发布时间】:2020-06-05 14:25:31
【问题描述】:

我编写了 C# 代码来查看列表框中的记录。

我已将 KeyDown 事件附加到文本框,如下所示:

    private void txtitem_code_KeyDown(object sender, KeyEventArgs e)
    {
        if (e.KeyCode == Keys.Down)
        {
            listBox1.Focus();
            listBox1.SelectedIndex = 0;
        }
    }

但是如果我按下向下箭头键,它会给我这个错误:

“System.ArgumentOutOfRangeException”类型的未处理异常 发生在 System.Windows.Forms.dll 中

附加信息:InvalidArgument=“0”值对 '选定索引'。

请帮我调试一下这个问题。

【问题讨论】:

  • 该错误意味着您的列表框中还没有任何项目,因此没有任何内容可供选择。因此,您不能将所选索引设置为 0,因为该索引不存在。
  • 请给我一些解决方案!
  • @Pramu 将至少一项添加到您的列表框
  • 它已经有两个项目
  • 你有没有试过在行上放一个断点并调试来验证listBox1中有多少项?

标签: c# winforms


【解决方案1】:
listBox1.SelectedIndex = 0;

这是导致抛出异常的行。 ArgumentOutOfRangeException 有点暴露了问题所在,您正在尝试选择第 0 个元素,但由于列表框为空,它不存在。

要么向listBox1 添加一些项目,要么在尝试更改所选项目之前检查listBox1 是否为空,例如:

private void txtitem_code_KeyDown(object sender, KeyEventArgs e)
{
    if (e.KeyCode == Keys.Down)
    {
        listBox1.Focus();
        if (listBox1.Items.Count > 0)
        {
            listBox1.SelectedIndex = 0;
        }
    }
}

【讨论】:

    【解决方案2】:

    我可能误解了这个问题,但在我看来,错误来自所选的索引检查。当然,这可能是基于我所做的一些假设。

    注意微软所说的:

    ListBox.SelectedIndex 属性 获取或设置 ListBox 中当前选定项的从零开始的索引。

    属性值 - Int32当前选定项的从零开始的索引。如果未选择任何项,则返回负一 (-1) 值。

    ArgumentOutOfRangeException 分配的值小于 -1 或大于或等于项目计数。

    参数异常 SelectionMode 属性设置为无。

    选择模式 SelectionMode 的 One 或 None 值。

    参数异常 尝试分配的值不是“一”或“无”的 SelectionMode 值。

    InvalidEnumArgumentException 已尝试将 SelectionMode 的 MultiExtended 值分配给控件。

    根据这些信息,我会验证列表框是否有数据,并且选择模式是否设置为 1。

    这只是一个起点。您是否检查过列表框中的项目数(listBox1.Items.Count)?您是否检查了列表框中已选择项的数量(listbox1.GetSelectedIndices().Count())?

    【讨论】:

    • 大声笑,当我正在查找列表框的 MS 属性时,Tom Dee 正在回答。哦,好吧,我会继续努力=)
    猜你喜欢
    • 1970-01-01
    • 2020-02-04
    • 1970-01-01
    • 2016-03-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多