• 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

    • My hunch is that EU rejected Apple's proposal because Trusted System Agent would be an intermediary offered to third party AI's (this article is also worded as such) but Siri AI itself would not pass this intermediary. This would cause a situation where Siri AI would have more direct system access and offer it an unfair advantage. (speaking from EU regulator perspective here) Apple is citing security issues with doing what EU asked for, and I think this also supports this theory, because truly direct system access like Siri AI would make it impossible to control third party AI's running on the devices and e.g. reign them in via adjustments to Trusted System Agent. So, I _think_ this is the sticking point right now.
    • I have not even heard of that game. will take a look
    • Chasys Photo 5.41.01 by Razvan Serea Chasys Photo is a suite of image editing applications including a layer-based image editor with adjustment layers, linked layers, timeline and frame-based animation, icon editing, image stacking and comprehensive plug-in support (Chasys Photo Editor), a fast image viewer (Chasys Photo Viewer) and a fast multi-threaded image file converter (Chasys Photo Converter) , with RAW image support in all components. It supports the native file formats of several competitors including Adobe Photoshop, Affinity Photo, ArtWeaver, Corel PhotoPaint, FireAlpaca, GIMP, Krita, Paint.NET, PaintShop Pro and Pixlr, and the whole suite is designed to make effective use of multi-core processors, touch-screens and pen-input devices. Designed under the mantra of “unique, flexible and powerful”, Chasys Photo takes a radically different approach to image editing with the aim of opening up new possibilities for those who dare to be different. Chasys Photo key features: Free-style layering with blending modes Adjustment layers with multiple adjustments per layer Linked layers (a.k.a Linked Smart Objects) Composite, Image List, Frame Animation and Object Animation image modes Animation, both frame-based and object-based (timeline animation) Animation Composer engine Image Stacking for noise reduction, super-resolution, etc. Tablet/Pen-input/Stylus support with pressure control Touch-screen support with gestures including pitch-to-zoom and multi-finger panning Support for the native formats of Adobe Photoshop, Affinity Photo, ArtWeaver, Corel PhotoPaint, FireAlpaca, GIMP, Krita, Paint.NET, PaintShop Pro and Pixlr Support for common formats such as JPEG, animated PNG, animated GIF, TIFF, PICT, WebP, HEIF, DDS, JPEG-2000, JPEG-XR, JPEG-XL, AVI video, etc. Support for the OpenRaster interchange file format and rare formats such as QOI, MNG/JNG and DPX Support for older formats such as PPM/PGM/PBM, PCX/DCX, PCD, TGA, COKE, etc. Comprehensive Camera RAW file support with live adjustment Extensive plug-in support with streamlined SDKs Support for Photoshop Filter Plug-ins (.8BF) Advanced printing and scanning engines PDF document generation Icon and cursor editing, import and export, including Vista-style and Mac-OS icons Screen Capture, including Video Screen Capture with multiple triggering modes Video capture from devices (e.g. TV/Video) Supports multi-core processors, High-DPI displays and Multiple Display setups Integrated File Browser, Bluetooth OBEX and in-built utilities (Calculator, Notepad) Shell integration with thumbnails and conflict detection Unlimited Undo/Redo and Asynchronous Auto-Save, with Just-in-time memory compression to save space Fully re-editable text with advanced styling and effects (TextArt) Full alpha channel through out the workflow with Alpha protection (a.k.a. transparency protection) Multiple language support with user-editable language files and translation assistant (Chasys Photo Language Studio) Anti-aliasing and super-sampling support in tools and paths* Smart-resizing (similar to seam-carving) Best-in-class post-edit heuristics anti-aliasing engine Physical measurement specification with display size detection via EDID Uses the latest CD5 specification with animation and multi-resolution Super-fast internal graphics engine (JpDRAW2) Full UNICODE support in all components Metadata save, restore and scale to imitate vector art Configurable Guides and Grids with Snap-to-Grid Smart-dither to custom palette Asynchronous preview rendering engine Pantone equivalent palettes for PMS 100 to 814-2x Automatic color naming ... and many more! Chasys Photo 5.41.01 changelog: New Features Layered images with multiple pages (Composite/Multi-page) Additional templates to support template-centric workflow New Layer Blend Mode: Inverse Luma Mask Horizon detection in Rotate Transform Cropping option when importing video Orientation options in QR Code Generator plug-in Solved angle ambiguities (CCW versus CW) Internal Improvements Improved graphics engine (JpDRAW2™ v26.05) Improved CD5 codec (v4.10, improved ACSC compression) Improved interpolation when downsizing images Improved motion detection in Video Capture Slightly lower memory usage (RAM is getting expensive!) File Support and Bug Fixes Improved PXZ file support (placeholders, blanks) [bug-fix] Memory leak in flt_JPEG.dll Download: Chasys Photo 5.41.01 | 46.1 MB (Freeware) View: Chasys Photo Home Page | Wikipedia Page | Screenshot Get alerted to all of our Software updates on Twitter at @NeowinSoftware
    • We don't need stars for the word, just use the word "CSAM"
  • Recent Achievements

    • Very Popular
      Captain_Eric earned a badge
      Very Popular
    • One Month Later
      amusc earned a badge
      One Month Later
    • One Month Later
      DJC50PLUS earned a badge
      One Month Later
    • Week One Done
      DJC50PLUS earned a badge
      Week One Done
    • Proficient
      Eric Biran went up a rank
      Proficient
  • Popular Contributors

    1. 1
      +primortal
      508
    2. 2
      PsYcHoKiLLa
      220
    3. 3
      ATLien_0
      92
    4. 4
      +Edouard
      90
    5. 5
      Steven P.
      83
  • Tell a friend

    Love Neowin? Tell a friend!