Credo che a chi ha deciso di far fuori la vecchia e cara proprietà ItemData dalle ComboBox e ListBox fischieranno spesso le orecchie.
In VB .NET questo problema può essere risolto in diversi modi, il più semplice dei quali mi sembra quello di ricorrere ad una struttura di dati.
In pratica occorre creare una struttura formata da due campi, nel tuo caso id e nome
codice:
Public Structure IdNome
Public Id As Integer
Public Nome As String
End Structure
e popolare la ListBox con elementi di questa struttura
codice:
Dim oIdNome As IdNome
oIdNome.Id = ...
oIdNome.Nome = ...
ListBox1.Items.Add(oIdNome)
...
Per fare in modo che la ListBox elenchi solo i campi Nome occorre effettuare l'overriding del metodo ToString, cosa che può essere fatta anche all'interno della struttura
codice:
Public Structure IdNome
Public Id As Integer
Public Nome As String
Public Overrides Function ToString() As String
Return Nome
End Function
End Structure
Al momento della selezione di un elemento nella ListBox, si può riportare l'elemento selezionato nella strutttura
codice:
oIdNome = CType(ListBox1.Items(ListBox1.SelectedIndex), oIdNome)
con la opportuna conversione di tipo.
Spero ti sia utile.