• 0

[VB.NET]Listbox string replace


Question

First of all Happy New Year Neowins.

The program gets the following string in db.lib NAME > URL

For Example:


GOOGLE > http://google.com
[/CODE]

When i start my form loads the whole db.lib file in listbox1 like this:

listbox.png

after that when i double click it will open me http://google.com because i split it with this tag (">")

[CODE]
Dim arg() As String
For i As Integer = 0 To ListBox1.Items.Count
arg = ListBox1.SelectedItem.ToString.Split(">")
Next
[/CODE]

My question is: How can i hide the url addres ("http://") in list box to show only the name Google and when i click it to open http://google.com - Thanks

Btw this program gets the mms: protocol (most used for Online TV) and play it in VLC player.

The whole code:

[CODE]
Imports System.Net
Imports System.IO
Imports System.Web
Public Class Form1
Dim i As Integer
Private Sub ??????ToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ??????ToolStripMenuItem.Click
Dim inp As String = InputBox("???? ??? ??????????", "???????", vbOKCancel)
If inp <> "" Then
ListBox1.Items.Add(inp)
End If
End Sub
Private Sub Form1_FormClosed(ByVal sender As Object, ByVal e As System.Windows.Forms.FormClosedEventArgs) Handles Me.FormClosed
My.Settings.path = Label1.Text
Dim w As New System.IO.StreamWriter("db.lib")
Dim i As Integer
For i = 0 To ListBox1.Items.Count - 1
w.WriteLine(ListBox1.Items.Item(i))
Next
w.Close()
End Sub
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Label1.Text = My.Settings.path
Dim r As New System.IO.StreamReader("db.lib")
While (r.Peek() > -1)
ListBox1.Items.Add(r.ReadLine)
End While
r.Close()
End Sub
Private Sub ListBox1_DoubleClick(ByVal sender As Object, ByVal e As System.EventArgs) Handles ListBox1.DoubleClick
Dim Client As New WebClient
Dim arg() As String
For i As Integer = 0 To ListBox1.Items.Count
arg = ListBox1.SelectedItem.ToString.Split(">")
Next
Try
Dim html = Client.DownloadString(New Uri(arg(i + 1)))
Client.Headers.Add(HttpRequestHeader.UserAgent, "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; .NET CLR 1.0.3705;)")
Try
Dim StartPos As Integer = html.IndexOf("mms")
Dim EndPos As Integer = html.IndexOf("</object>", StartPos)
Dim finaloutcome As String = html.Substring(StartPos, EndPos - StartPos)
Dim Key As String = (finaloutcome.Substring(0, 90))
Dim Last As String = Key.Replace(""">", "")
Dim all As String = Last.Replace("<pa", "")
If Label1.Text = "" Then
MsgBox("Please coose the folder to your VLC Player!")
Else
Shell(Label1.Text & "\vlc.exe " & all)
End If
Catch ex As Exception
MsgBox("This link does not support mms protocol!")
End Try
Catch ex As Exception
MsgBox("I cant connect to the website!")
End Try
End Sub
Private Sub VLCPlayerToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles VLCPlayerToolStripMenuItem.Click
FolderBrowserDialog1.ShowDialog()
Label1.Text = FolderBrowserDialog1.SelectedPath
My.Settings.path = Label1.Text
My.Settings.Save()
End Sub
End Class
[/CODE]

Link to comment
https://www.neowin.net/forum/topic/1128630-vbnetlistbox-string-replace/
Share on other sites

16 answers to this question

Recommended Posts

  • 0

You could have an array of all your sites that when clicked in the list it goes to that index and launches the site that's in that index. So what you would end up doing, is dump the db.lib thing into an array (splitting at the > and grabbing the second index) and at the same time put the first split index into the list box.

Then have a Click, or Selected Index Changed event. And just do like:

LaunchSite(siteUrls[lstSites.SelectedIndex]) 'Replacing functions/names accordingly

  • 0

I think what Firey means is to create a class member that is an array, and keep your URLs in there separately. So in your class you'd do this (please note, my VB is very rusty, so this will probably not compile, but it should give you an idea as to what to do):

Imports System.Net
Imports System.IO
Imports System.Web
Imports System.Collections.Generic

Public Class Form1
	Private m_urls As List(Of String)

	' We'll use this subroutine to add the site to both the listbox and the list of URLs.
	Private Sub AddSiteToList(ByVal siteString As String)
		Dim stringParts() As String = str.Split("&gt;")

		If stringParts.Length &lt;&gt; 2 Then
			Throw New ArgumentException("Parameter 'siteString' was an unexpected format (value: '" + siteString + "'). Please make sure string is of the format '[Site_Name]&gt;[URL]'")
		End If

		ListBox1.Items.Add(stringParts(0))
		m_urls.Add(stringParts(1))
	End Sub

	' We'll use this function to retrieve the URL for the selected item.
	Private Function GetSelectedUrl() As String
		If ListBox1.SelectedIndex &gt; -1 Then
			GetSelectedUrl = m_urls(ListBox1.SelectedIndex)
		Else
			GetSelectedUrl = ""
		End If
	End Function

	Private Sub ??????ToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ??????ToolStripMenuItem.Click
		Dim inp As String = InputBox("???? ??? ??????????", "???????", vbOKCancel)
		If inp &lt;&gt; "" Then
				AddSiteToList(inp)
		End If
	End Sub


	Private Sub Form1_FormClosed(ByVal sender As Object, ByVal e As System.Windows.Forms.FormClosedEventArgs) Handles Me.FormClosed
		My.Settings.path = Label1.Text
		Dim w As New System.IO.StreamWriter("db.lib")
		For i As Integer = 0 To ListBox1.Items.Count - 1
			w.WriteLine(ListBox1.Items.Item(i) + "&gt;" + m_urls(i))
		Next
		w.Close()
	End Sub

	Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
		Label1.Text = My.Settings.path
		Dim r As New System.IO.StreamReader("db.lib")
		While (r.Peek() &gt; -1)
				AddSiteToList(r.ReadLine)
		End While
		r.Close()
	End Sub

	Private Sub ListBox1_DoubleClick(ByVal sender As Object, ByVal e As System.EventArgs) Handles ListBox1.DoubleClick
		Dim url As String = GetSelectedUrl()

		If url.Length &gt; 0 Then
			Try
				Dim Client As New WebClient
				Dim html = Client.DownloadString(New Uri(url))
				Client.Headers.Add(HttpRequestHeader.UserAgent, "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; .NET CLR 1.0.3705;)")
				Try
					Dim StartPos As Integer = html.IndexOf("mms")
					Dim EndPos As Integer = html.IndexOf("", StartPos)
					Dim finaloutcome As String = html.Substring(StartPos, EndPos - StartPos)
					Dim Key As String = (finaloutcome.Substring(0, 90))
					Dim Last As String = Key.Replace("""&gt;", "")
                                        Dim all As String = Last.Replace("&lt;pa", "")
					If Label1.Text = "" Then
						MsgBox("Please coose the folder to your VLC Player!")
					Else
						Shell(Label1.Text &amp; "\vlc.exe " &amp; all)
					End If
				Catch ex As Exception
					MsgBox("This link does not support mms protocol!")
				End Try
			Catch ex As Exception
				MsgBox("I cant connect to the website!")
			End Try
		End If
	End Sub

	Private Sub VLCPlayerToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles VLCPlayerToolStripMenuItem.Click
		FolderBrowserDialog1.ShowDialog()
		Label1.Text = FolderBrowserDialog1.SelectedPath
		My.Settings.path = Label1.Text
		My.Settings.Save()
	End Sub
End Class

  • 0

Personally, I'd have them split on reading from the db.lib file into a key/value pair with the DisplayMember property of the list box set to the key (name of site) and the ValueMember property of list box set to the value (the url) then assign the collection of key/value pairs to the listbox items collection...

Really can't be bothered to write up a sample though...

  • 0

Personally, I'd have them split on reading from the db.lib file into a key/value pair with the DisplayMember property of the list box set to the key (name of site) and the ValueMember property of list box set to the value (the url) then assign the collection of key/value pairs to the listbox items collection...

Really can't be bothered to write up a sample though...

That probably would be better, but I picked the easiest solution requiring the fewest changes :p

  • 0

That probably would be better, but I picked the easiest solution requiring the fewest changes :p

Well, should also note it'd be more ideal to move any non-UI code out of the Form class into it's own class(es) too... so may as well re-architect it a little more anyway... *shrugs*

  • 0

Not for the sake of < 100 LoC it wouldn't. KISS.

Right, I agree with KISS - however this looks like an educational application (as in one he's working on to learn rather than just a quick fix from someone who knows concepts); in which case I deem it more useful to practice correctly laying out your code as you would for a larger application.

Once people get set in lazy ways they tend to stay in them.

  • 0

I agree that in general code should be split out as much as possible (Gui with Gui, logic with logic). Though he doesn't seem to have strong knowledge with the programming, so it would end up just causing more headaches to go and re-do all his code for him. As he won't understand what the program does.

  • 0

best of using a listbox tag of your item for the url and open the tag keeping the item intact.

listbox.Items(i).Tag = "http://www.google.com"[/CODE]

Indeed that would be better. In my defence the last time I used a ListBox in Windows Forms .NET 3 hadn't gained any traction yet :p

This topic is now closed to further replies.
  • Posts

    • Windows 11 KB5094126 June 2026 Patch Tuesday update now available to download by Sayan Sen Microsoft has released the June 2026 Patch Tuesday updates for Windows 11 25H2, 24H2. The 25H2 and 24H2 update is provided via KB5094126 (manual download link below), build 26100.8655 on 24H2, and build 26200.8655 on 25H2, after applying the updates. Windows 11 23H2 is available under KB5093998 (build 22631.7219). Microsoft has not published changelog yet. We will update the article once it's out. [Update: It's out] [Secure Boot] With this update, Windows quality updates include additional high confidence device targeting data, increasing coverage of devices eligible to automatically receive new Secure Boot certificates. Devices receive the new certificates only after demonstrating sufficient successful update signals, maintaining a controlled and phased rollout. [Virtualization] Fixed: This update addresses an issue that could result in Stop errors HYPERVISOR_ERROR (0x20001) and KMODE_EXCEPTION_NOT_HANDLED (0x1E) after installing KB5089573 on some devices during system restarts, virtual machine operations, or while running some gaming applications Microsoft says there are no known issues. These updates will be available from Windows Update and should install automatically in most cases. If you would like to download these updates for offline installation, you can get them from the Microsoft Catalog website. You can find the update for 25H2/24H2 at this link.
    • Price Drop: Save 90% on ChatPlayground AI lifetime plan, and compare multiple AI models by Steven Parker Today's highlighted deal comes via our Apps + Software section of the Neowin Deals store, where for only a limited time, you can save up to 90% on ChatPlayground AI: Lifetime Subscriptions. ChatPlayground AI puts the world’s top AI models in one powerful interface, letting you enter a single prompt and instantly compare outputs from multiple models to choose the perfect response for your needs. Boost productivity and creativity with access to the latest AI giants like GPT-4o, Claude Sonnet 4, Gemini 1.5 Flash, DeepSeek V3, and dozens more — all in one window. Whether you’re chatting, coding, generating images, or refining prompts, ChatPlayground AI equips you with advanced tools like prompt engineering, image/PDF chat, saved conversations, and AI image creation, plus priority support to keep your workflow seamless. Access the world’s best AI models Side-by-Side Comparisons: Enter one prompt & instantly view results from multiple AI models to find the best output for your needs 40+ AI Models: Includes GPT-4o, Claude Sonnet 4, Gemini 1.5 Flash, DeepSeek V3, Llama, Perplexity, and many more Multi-Function Platform: Access AI for chat, image generation & coding all within a single interface Web Browser Extension: Offers a Chrome extension to seamlessly integrate the platform into your browsing workflow Boost productivity with powerful features ChatPlayground Interface: Designed for seamless AI model comparison in one window Prompt Engineering: Refine & optimize your prompts for better, more accurate responses Chat with Images & PDFs: Upload visuals and documents to get context-aware answers Saved Chat History: Keep track of past conversations for reference & ongoing projects AI Image Generation: Create high-quality visuals powered by top AI image models Priority Customer Support: Get faster assistance whenever you need it What you'll get with the Unlimited Plan Includes unlimited messages/month Built for prompt engineers, startups, and teams who run experiments nonstop Includes priority access to new features and future models Good to know Length of access: lifetime Redemption deadline: redeem your code within 30 days of purchase Access options: Desktop Max number of device(s): Unlimited Available to both NEW & Existing users Updates included A lifetime subscription to ChatPlayground AI (Unlimited Plan) normally costs $619, but you can pick it up for just $59.97 for a limited time - that represents a saving of $614 (90% off). Click the link below for more details, always check terms and specifications before making a purchase. Get this ChatPlayground AI (Unlimited) for $59.97 (was $619) There are also two other discounted plans to choose from. Although priced in U.S. dollars, this deal is available for digital purchase worldwide. Support queries If you have queries or need support for any of the Neowin Deals, please use the contact form here. Neowin Deals are managed and sold by StackCommerce who represent Neowin on an affiliate basis. Why we post these deals We post these because we earn commission on each sale so as not to rely solely on advertising, which many of our readers block. It all helps toward paying staff reporters, servers and hosting costs. So for those that keep moaning and complaining, be thankful we're still online for you to even do that. Other ways to support Neowin Whitelist Neowin by not blocking our ads Create a free member account to see fewer ads Make a donation to support our day to day running costs Subscribe to Neowin - for $14 a year, or $28 a year for an ad-free experience Disclosure: Neowin benefits from revenue of each sale made through our branded deals site powered by StackCommerce.
    • Amazon Deal: These AMD RX 9070 XT GPUs are very good offers by Sayan Sen Following the release of AMD's new RX 9070 GRE last week for $549 (our review), AMD currently has a couple of great deals on the more powerful 9070 XT wherein the GPU is on sale for $650. We already covered the Gigabyte Gaming model a couple of days ago which is still live at that price. Aside from that, the white ICE variant is also at the same price (purchase link under the specs table down below). This is interesting to note considering white cards are generally more expensive as they come with a premium attached. Similar to the Gaming model, the ICE card too employs Gigabyte's WINDFORCE cooling system which combines multiple design elements such as alternate-spinning Hawk fans, a vapor chamber, and composite heat pipes to manage heat dissipation. The Server-grade Thermal conductive gel further helps in this department. The inclusion of a semi-passive cooling mode allows the fans to remain inactive under low workloads, which allows for reduced noise operation during lighter usage. There is dual BIOS switch that allows toggling between performance and silent modes. The tech specs of the card are given in the table below: Specification Value Boost Clock Up to 3060 MHz (Reference Card: 2970 MHz) Game Clock Up to 2520 MHz (Reference Card: 2400 MHz) Stream Processors 4096 Memory Size 16 GB Memory Type GDDR6 Memory Clock 20 Gbps Memory Bus Width 256-bit PCI Express Interface PCI Express 5.0 Max Resolution 7680 × 4320 Maximum Displays Supported 4 Display Outputs 2 × DisplayPort 2.1a 2 × HDMI 2.1b Card Dimensions 288 × 132 × 56 mm (L × W × H) (2.7 slot) Recommended Power Supply 750 W Power Connectors 3 × 8-pin PCIe Get it at the link below: GIGABYTE Radeon™ RX 9070 XT Gaming OC ICE 16G Graphics Card (GV-R907XGAMINGOCICE-16GD): $649.99 (Sold and Shipped by Amazon US) (Was: $750) If your budget is lower, check this Nvidia RTX 5060 Ti 8GB deal out for only $330 wherein you get the latest James Bond game free. This Amazon deal is US-specific and not available in other regions unless specified. This is a first-party seller link (at the time of article publishing); ensure that you also purchase from a first-party seller link only. If you don't like it or want to look at more options, check out the previous deals that we have covered, OR you can also visit Amazon US deals page. Get Prime (SNAP), Prime Video, Audible Plus or Kindle / Music Unlimited. Free for 30 days. As an Amazon Associate, we earn from qualifying purchases.
    • What about it? The old MV2 version will not work.
  • Recent Achievements

    • Week One Done
      rubentuben8 earned a badge
      Week One Done
    • Week One Done
      ARaclen earned a badge
      Week One Done
    • One Year In
      jojodbn earned a badge
      One Year In
    • One Month Later
      jojodbn earned a badge
      One Month Later
    • Week One Done
      jojodbn earned a badge
      Week One Done
  • Popular Contributors

    1. 1
      +primortal
      515
    2. 2
      PsYcHoKiLLa
      229
    3. 3
      +Edouard
      118
    4. 4
      ATLien_0
      87
    5. 5
      Steven P.
      83
  • Tell a friend

    Love Neowin? Tell a friend!