2011-03-11 29 views
8

Sto lavorando a un'applicazione Windows Form in .NET 4.0. Dato che sono dati vincolanti su un BindingSource (a cui è associato uno ComboBox), ottengo la seguente eccezione. Nota: lo ottengo solo se faccio in modo che il debugger si fermi alle eccezioni generate, non gestite o gestite. Quindi, l'eccezione è catturata da qualche parte - ma non sono sicuro se sia OK essere gettato.InvalidArgument = Il valore di '0' non è valido per 'SelectedIndex'

ArgumentOutOfRangeException si è verificato InvalidArgument = valore '0' non è valido per 'SelectedIndex'. Nome parametro: SelectedIndex

Non sto impostando la proprietà SelectedIndex. Il mio codice è mostrato sotto. myData è un IList di entità (List in fase di esecuzione):

myBindingSource.DataSource = myData; 

io non riesco a capire quello che sto facendo male. Inoltre, lo Stack di chiamate mi confonde un po '(vedi sotto). Il framework Windows Form sembra impostare SelectedIndex nella casella combinata, che causa l'eccezione. Qualcuno conosce un modo per sbarazzarsi di questo?

Acclamazioni Matthias

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

Quando si associa la combinazione, verrà automaticamente impostato l'elemento selezionato su 0 ° elemento. Perché non fai un controllo e non legare se non ci sono articoli nella tua origine dati? – Pabuc

risposta

16

Quando si chiede il debugger di fermarsi sulle eccezioni, lo farà, indipendentemente dal fatto che essi saranno trattati o meno. Questo porta a scenari come quello che hai osservato:
Il debugger si ferma a un'eccezione e ti confonde, sebbene l'eccezione sia perfettamente valida e sembra essere prevista dal codice circostante, poiché gestisce l'eccezione senza morire.

Per riassumere e rispondere alla tua domanda:
Non tutte le eccezioni il debugger si ferma a sono un indicatore che si sta facendo qualcosa di sbagliato o che ci sia un problema nel codice.

Aggiornamento (crediti vai a Mark):
È possibile indicare al debugger di rilevare solo le eccezioni, se si attiva l'opzione "Solo il mio codice".

+8

Dipende se "solo il mio codice" è abilitato .. –

+0

Mark, tu dai il nome! Per qualsiasi motivo, ho disattivato "solo il mio codice" per qualsiasi motivo e l'ho dimenticato. Grazie! –

1

Si può anche provare questo. Prima di impostare combobox DataSource imposta il suo BindingContext

myBindingSource.BindingContext = this.BindingContext; 
myBindingSource.DataSource = myData; 
Problemi correlati