2011-03-11 870 views
8

我正在使用.NET 4.0中的Windows窗體應用程序。因爲我將數據綁定到BindingSource(綁定了ComboBox),所以我得到以下例外。注意:只有在調試器停止在拋出異常的情況下,我才能得到它,不管是未處理還是處理。因此,這個例外被捕獲 - 但我不確定是否可以拋出。InvalidArgument ='0'的值對'SelectedIndex'無效

ArgumentOutOfRangeException發生 InvalidArgument = '0' 值不是有效的關於 '的SelectedIndex'。 參數名稱:SelectedIndex

我沒有設置SelectedIndex屬性。我的代碼如下所示。 myData是實體的IListList在運行時):

myBindingSource.DataSource = myData; 

我想不出什麼我做錯了。而且,Call Stack讓我有點困惑(見下文)。 Windows窗體框架似乎在組合框上設置SelectedIndex,這會導致異常。有沒有人知道擺脫這種方式?

乾杯 馬蒂亞斯

System.Windows.Forms.dll!System.Windows.Forms.ComboBox.SelectedIndex.set(int value) + 0x233 bytes 
System.Windows.Forms.dll!System.Windows.Forms.CurrencyManager.OnPositionChanged(System.EventArgs e) + 0x3e bytes  
System.Windows.Forms.dll!System.Windows.Forms.CurrencyManager.ChangeRecordState(int newPosition, bool validating, bool endCurrentEdit, bool firePositionChange, bool pullData) + 0x1bd bytes  
System.Windows.Forms.dll!System.Windows.Forms.CurrencyManager.List_ListChanged(object sender, System.ComponentModel.ListChangedEventArgs e) + 0x75c bytes 
System.Windows.Forms.dll!System.Windows.Forms.BindingSource.ResetBindings(bool metadataChanged) + 0x3e bytes  
System.Windows.Forms.dll!System.Windows.Forms.BindingSource.SetList(System.Collections.IList list, bool metaDataChanged, bool applySortAndFilter) + 0x22c bytes 
System.Windows.Forms.dll!System.Windows.Forms.BindingSource.DataSource.set(object value) + 0x47 bytes 
(my method) 
+0

當你綁定你的組合時,它會自動將selectedIndex設置爲第0項。如果數據源中沒有項目,爲什麼不做檢查並且不綁定? – Pabuc

回答

16

當你問調試器停止例外,它會這麼做,無論他們是否將被處理或沒有。這導致像你所觀察到的一個場景:
調試器停在一個例外,迷惑你,雖然異常是完全有效的,似乎被周圍的代碼可以預料的,因爲它處理異常沒有死亡。

總結和回答你的問題:
並非所有調試程序停止的異常都表明你做錯了什麼或者代碼有問題。

更新(積分轉到標記):
如果啓用選項「只是我的代碼」,您可以告訴調試器只捕獲您的異常。

+8

這取決於是否啓用「只是我的代碼」。 –

+0

馬克,你的名字!出於任何原因,我出於任何原因關閉了「我的代碼」並忘記了它。謝謝! –

1

你也可以試試這個。在設置ComboBox數據源之前設置它的BindingContext

myBindingSource.BindingContext = this.BindingContext; 
myBindingSource.DataSource = myData; 
相關問題