vbdotnetboy, as per usual, that thought hit me 3 minutes after I hit the post button.

So now I have:
VB Code:
  1. For Each da As String In DArray
  2.     defLink.Text = da
  3.     defLink.NavigateUrl = "http://www.company.com/infolog.asp?info=" + da
  4.     ListBox1.Items.Add(defLink)
  5. Next

Stepping through the code, the attributes get populated correctly, but the listbox displays "System.Web.UI.MobileControls.Link".

Hmmm... VBnetFan at first I didn't think your idea applied, but now I have an idea. Say that DArray is already sorted and I do:
VB Code:
  1. For Each da As String In DArray
  2.     ListBox1.Items.Add(da)
  3. Next
This populates the listbox. Then I could get the selectedindexchanged event to trigger it like this:
VB Code:
  1. Private Sub ListBox1_SelectedIndexChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles ListBox1.SelectedIndexChanged
  2.     Process.Start("http://www.company.com/infolog.asp?info=" + sender.text)
  3. End Sub
The problem is getting the text of the selected index. Any idea on how to do that?