【问题标题】:Why am I getting an "IndexOutOfRangeException was unhandled" here?为什么我在这里得到“IndexOutOfRangeException 未处理”?
【发布时间】:2016-02-11 01:27:30
【问题描述】:

comboBoxWeekToSchedule 中有 13 个条目,当我选择索引 3 处的条目时(comboBoxWeekToSchedule 中的第四个条目)。然而抛出了“IndexOutOfRangeException 未处理”异常。

这是抛出异常的运行代码(在处理程序的第一行):

private void comboBoxWeekToSchedule_SelectedIndexChanged(object sender, EventArgs eargs)
{
    DateTime dt = Convert.ToDateTime(comboBoxWeekToSchedule.ValueMember[comboBoxWeekToSchedule.SelectedIndex]);
    DisableICRVBS(AYttFMConstsAndUtils.IsFirstWeekOfMonth(dt));            
}

comboBoxWeekToSchedule 中的值是 LongDateString 格式的日期;我特别选择的是“2016 年 3 月 7 日,星期一”

那么 SelectedIndex 怎么可能超出范围呢?

【问题讨论】:

  • 你真的检查过SelectedIndex的值吗?是 3 还是尚未设置,因为您在选择回调中...
  • 正是.. 你在回调中。检查 'comboBoxWeekToSchedule.SelectedIndex' 值

标签: c# combobox selectedindexchanged indexoutofrangeexception valuemember


【解决方案1】:

ValueMember 是一个字符串。当您使用comboBoxWeetToSchedule.SelectedValue 属性时,ComboBox 控件使用它来检索(使用反射)与特定元素关联的值。因此,您可以将其设置为 "Date" 之类的,当您引用 SelectedValue 时,您将真正检索到 SelectedItemDate 属性。

对该字符串进行索引将检索“第 n 个”字符,我确信这不是您想要做的。由于您没有提供任何设置 ValueMember 的代码,我只能假设您将其设置为 3 个字符或更少的字符串,这就是它失败的原因。

您真正想要在代码中做的是检索值:

DateTime dt = Convert.ToDateTime(comboBoxWeekToSchedule.SelectedValue);

【讨论】:

  • "我只能假设您将其设置为 3 个字符或更少的字符串";不,如前所述,它们是诸如“2016 年 3 月 7 日星期一”之类的值
  • 我不是在谈论放入组合框中的值,而是在谈论 ValueMember 本身的值。毕竟,它只是一个充当“查找”值本身属性的字符串。如果您要在最初失败的赋值上放置一个断点并检查 ValueMember 的值,您会发现它是一个长度小于 4 个字符的字符串(如果您从未为其赋值,它甚至可能为空 - 在在这种情况下 SelectedValue 将简单地返回 SelectedItem)。
猜你喜欢
  • 2020-07-31
  • 2021-11-08
  • 2016-11-22
  • 2015-10-25
  • 1970-01-01
  • 2016-09-26
  • 2012-03-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多