Ci sono svariati modi per farlo.
Oltre a quello che ti hanno suggerito, te ne propongo un paio.
1) ti crei un datatable con i campi che ti servono e lo associ alla listbox(impostando DataSource, DisplayMember e ValueMember)
Per aggiungere dati alla listbox basta che aggiungi una nuova riga al datatable e il valore lo recuperi con la proprietà: SelectedValue
esempio:
codice:
Dim dt As DataTable
Private Sub CreaDataTable()
dt = New DataTable
dt.TableName = "miaTabella"
dt.Columns.Add("value", System.Type.GetType("System.String"))
dt.Columns.Add("oggetto_email", System.Type.GetType("System.String"))
End Sub
Private Sub AggiungiRiga(value As String, oggetto As String)
Dim riga As DataRow = dt.NewRow
riga("value") = value
riga("oggetto_email") = oggetto
dt.Rows.Add(riga)
End Sub
2) ti crei una classe con le proprietà che ti servono a popolare la listbox, e usi la classe per popolare la listbox.
Per recuperare il valore, basta fare un casting, dell'item selezionato, alla tua classe.
esempio:
codice:
Public Class DatiListBox
Private _value As String
Private _oggetto As String
'.....property per leggere le proprietà....
Public Sub New(ByVal value As String, ByVal oggetto As String)
_value = value
_oggetto = oggetto
End Sub
Public Overrides Function ToString() As String
Return _oggetto
End Function
End Class
'aggiungi riga
ListBox1.Items.Add(New DatiListBox("mio valore", "mio oggetto"))
'recupera dati
Dim item As DatiListBox = DirectCast(ListBox1.SelectedItem, DatiListBox)
Ora non ti rimane che scegliere il metodo che più ti piace..