[C#] ListBox NullReferenceException

lunedì 21 luglio 2008 - 15.24

FedericoC Profilo | Junior Member

Ciao,

Purtroppo non è la prima vlta che mi capita questo errore, e sinceramente tutte le volte non riesco mai a capire il perchè a volte va ed a volte no...

private void listBoxCategoria_SelectedIndexChanged(object sender, EventArgs e)
{
string variabile = listBoxBanca.SelectedItem.ToString();
}

Mi genera un'eccezione (il listbox è popolato).
Ho anche un codice simile in un'altra form e funziona perfettamente mentre questo con il codice identico no, non riesco a capire il comportamente delle listbox e combobox dato che entrambi a volte mi fanno questi scherzi...


EDIT:
Ho notato che se nella listbox ci sono più elementi non succede, ma se ce ne è solo uno da questa ecezione... però non capisco anche perchè il valore listBoxBanca.SelectedItem.ToString(); che ottengo quando seleziono l'itemes è giusto...

Lanello Profilo | Senior Member

>...
>private void listBoxCategoria_SelectedIndexChanged(object sender,
>EventArgs e)
> {
> string variabile = listBoxBanca.SelectedItem.ToString();
> }
>...
>Mi genera un'eccezione (il listbox è popolato).
>...

Ciao,

la listbox è un controllo molto "flessibile" e dipende come lo popoli, infatti quando vai ad aggiungere un'item alla collection, puoi aggiungere una stringa, come anche un'oggetto più complesso che abbia al suo interno una proprietà stringa da visualizzare nell'elenco a runtime

(io ti faccio gli esempi in vb.net perchè quello uso :P non me ne volere, cercherò di farteli più chiari possibile)

se quando aggiungi gli elementi alla tua listbox fai semplicemente

mialistbox.items.add "ciao"

cioè aggiungi semplicemente un oggetto string, tutto ti dovrebbe funzionare quando fai la tua

variabile=mialistbox.selecteditem.tostring()

----

se invece quello che aggiungi è un'oggetto più complesso tipo (la classe che uso io)...

Public Class FlbCombo Private m_codice As String Private m_descrizione As String Public Sub New(ByVal ID As String, ByVal Descrizione As String) Me.ID = ID Me.Descrizione = Descrizione End Sub Public Property ID() As String Get Return m_codice End Get Set(ByVal Value As String) m_codice = Value End Set End Property Public Property Descrizione() As String Get Return m_descrizione End Get Set(ByVal Value As String) m_descrizione = Value End Set End Property Public Overrides Function ToString() As String Return Me.Descrizione End Function End Class

e quando aggiungi un item scrivi:

mialistbox.items.add new flbcombo("1","prova")

a runtime vedrai scritto "prova" (grazie all'override del ToString() fatto nella classe) ma il tuo selecteditem conterrà l'intera struttura che hai inserito all'inizio, e quindi per rileggerla dovrai creare un'oggetto dello stesso tipo e copiarci l'oggetto dalla item selezionata.

dim x as flbcombo x=mialistbox.selecteditem '<--- copio l'oggetto in una variabile d'appoggio variabile=x.descrizione variabile2=x.id

in questo caso selezionando un item riesco a recuperare sia il testo descrittivo (che magari in un grande database c'è la possibilità che venga fuori doppione) ed il suo corrispondente id (che di solito in un database ben strutturato dovrebbe essere UNIVOCO.

spero di averti aiutato
-----------------------------------------------------
La ricompensa per una cosa ben fatta, è averla fatta.

FedericoC Profilo | Junior Member

Il mio problema è che questo errore me lo dava soltanto quando inserisco un solo Items, quando è >1 funziona correttamente, anche se seleziono il primo items (oppure per i più pignoli Items 0 )...

Cmq per adesso ignoravo questa opzione che mi hi descritto anche se in effetti mi chiedevo come potevo fare per associare ad una stringa di una combobox il rispettivo valore del database...

Quindi adesso posso gestire le cose in maniera diversa, grazie per il consiglio...
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5