0

當我在索引3(comboBoxWeekToSchedule中的第四項)中選擇一個時,comboBoxWeekToSchedule中有13個條目。然而,「IndexOutOfRangeException未處理」異常被拋出。爲什麼我在這裏得到「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怎麼可能超出範圍呢?

+1

你有沒有實際檢查'SelectedIndex'的價值?是3還是還沒有設置,因爲你在選擇回調... – John3136

+1

正是..你在回調。檢查'comboBoxWeekToSchedule.SelectedIndex'的值 –

回答

1

ValueMember是一個字符串。當您使用comboBoxWeetToSchedule.SelectedValue屬性時,ComboBox控件將使用它來檢索(使用反射)與特定元素關聯的值。因此,您可能會將其設置爲"Date"之類的值,當您參考SelectedValue時,您確實會檢索到SelectedItemDate屬性。

對該字符串做索引將檢索'nth'字符,我相信這不是你想要做的。由於您沒有提供任何設置ValueMember的代碼,因此我只能假設您將它設置爲3個字符或更少的字符串,這就是它摔倒的原因。

你真的想在你的代碼做的是檢索值改爲:

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

「我只能假設你將它設置爲3個字符或更少的字符串」;不,如上所述,它們是諸如「2016年3月7日星期一」這樣的值。 –

+0

我並不是在討論組合框中的值,而是關於ValueMember本身的價值。它最終只是一個字符串,它可以作爲對值本身屬性的「查找」。如果您要在原始失敗的賦值中放置一個斷點並檢查「ValueMember」的值,則會發現它是一個長度小於4個字符的字符串(如果您從未爲其指定值,它甚至可能爲空)這種情況下SelectedValue只會返回SelectedItem)。 –

相關問題