Gå til innhold

[Løst][VB 2008] Listbox1 med mange verdier. Ryddiger kode hjelp


Anbefalte innlegg

Hei!

 

Har et program som har en ListBox1 men mange verdier. Problemet er at jeg vil gjøre det litt ryddigere i koden hvis det er mulig.

Og nå gjør jeg det slik:

 Dim wClient As Net.WebClient = New Net.WebClient
	If ListBox1.SelectedItem = "NAVN1" Then
		wClient.DownloadFile("http://www.linktilminside.com/filer/", "c:\" & ListBox1.SelectedItem & ".rar")
	End If

Den vil laste ned filen med endelsen *.rar til C:\. Men når ListBox1 har 100 verdier og jeg skal sjekke om brukeren trykker på f.eks verdi nummer 42 med navnet: NAVN42 så skal den laste ned en fil som jeg har linket til.

Finnes det en annen måte?

Endret av Gjest
Lenke til kommentar
Videoannonse
Annonse

Hva er egentlig poenget med den If linja?

 

Hvis du skal laste ned en drøss med filer, er det en fordel å bruke FTP istedet for HTTP, siden du da ikke trenger å vite navnet på fila du er ute etter (du kan liste opp alle filer i en mappe)

 

Eventuelt kan websiden din generere en XML side.

Lenke til kommentar

Joda, det er jeg klar over. Men HTTP har i utgangspunktet ikke noen mulighet til å liste opp filer eller mapper på serveren, og da er det en mulighet for websiden å generere en XML fil over filene på serveren som er mulig for programmet ditt å laste ned og bestemme hva programmet skal gjøre. XML filer er enkle å generere, og enkle å lese.

Lenke til kommentar

Har en del rar filer som ligger i en mappe. Trenger da et program som brukeren selv skal kunne velge hvilken fil han skal laste ned. F.eks i listbox1:

 

navn1

navn2

navn3

navn4

 

OSV....

Og når brukeren klikker på navn1 så skal den laste ned navn1 med slik URL f.eks: http://minside.no/navn1.rar

 

Så i steden for mange if setninger så tenkte jeg, er det en måte å gjøre dette enklere på?

Lenke til kommentar

Ok. Du må ha en kilde til filnavnene, dette kan løses på to måter (forsåvidt)

Enten så lager du en .txt fil (eller lignende) som du opprettholder selv, eller så får du webserveren til å generere en liste.

Deretter tar programmet ditt og laster ned denne filen fra serveren, og populerer for eksempel en listbox med disse filnavnene.

 

Når dette er gjort, så laster du ned den valgte filen (ListBox1.SelectedItem) med WebClient.

 

Da trenger du ingen if-er, og du kan tilogmed få webserveren til å vedlikeholde listen for deg.

Lenke til kommentar

Hmm, min erfaring i VB er ikke veldig stor men kan noe.

Forresten jeg har en MySQL database. Jeg vet hvordan jeg kobler med opp med vb.net, men kan jeg bruke det i steden for en tekstfil som inneholder alle navnene?

Og hvordan får jeg printet ut informasjonen til listbox?

 

Så hvis du vil skrive litt kode for meg eller formulere det enklere vill det vært flott! Takk for all hjelp hittil =)

Lenke til kommentar

Det var litt vanskelig å skjønne hva du er ute etter her ja.

 

Du har en listbox med filnavn som du vil laste ned fra en url?

 

Er det slik at du bare skal laste ned EN fil? dvs den som er merket i listboksen? isåfall kan du bruke følgende kode:

 

 

Dim Baseurl As String = "http://www.linktilminside.com/filer/"

 

If ListBox1.SelectedIndex > -1 Then ' Ingen vits i å gjøre noe hvis ingenting er valgt i listboxen.

 

Dim filnavn As String = ListBox1.SelectedItem

Dim wc As New WebClient

 

wc.DownloadFile(Baseurl & filnavn, "D:\" & filnavn & ".rar")

MsgBox("done") ' bør vel ha noe som varsler om at fila er ferdignedlasta

 

 

End If

 

 

------- En ting du kan legge til er mulighet for å velge flere ting fra listboxen åsså laste ned alle de. Dessuten bør du ha med exception hvis noe går galt.

 

 

@GeirGrusom: Det med xml er vel noe han kan bare kan gjøre dersom dette er en webside han har laget selv? Eller misforstår jeg noe.

 

Edit: senkveld, småfull og skrivefeil :)

Endret av The_Viper@EFNET
Lenke til kommentar

Hei takk for et godt svar!

Filene ligger i samme FTP mappe som heter "filer" uten ""

Så hvis brukeren velger:

Navn1

Så henter den en fil med det navnet i FTP mappen.

Men hvis brukeren klikker på:

Navn2

Så henter den en den annen fil med navnet i FTP mappen.

Men jeg skal teste det du skrev! Takk =)

 

BTW, tror du kan bruke XML for å så hente det inn til programmet. Vet du kan gjøre det med å finne ut om du har den siste versjonen av programmet eller ikke ;)

Lenke til kommentar

Selv hater jeg hardkoding, og dette er noe som fint kan gjøres uten å måtte vedlikeholde en txt fil eller en listbox.

Hvis serveren din støtter noen form for scripting (helt sikker PHP) er det ikke noen stor kunst å få den til å kunne lage en liste.

 

Men du sier det er FTP, og da har FTP en innebygget måte å få dette til uten å måtte gjøre noe slikt. Les om WebClient klassen og hvordan du kan bruke den med FTP (jeg har gjort noe lignende selv nemlig, men da var det bilder)

Lenke til kommentar

Takk det fungerte The_Viper@EFNET =D Bare at jeg må ha med hele filnavnet =(

Er det mulighet å gjøre om filnavnet på en måte? Slik at jeg ikke må ha det lange navnet slik det er i min URL? Så listbox1 har navnet: navn1

mens på FTP mappen er det: navn1-80784

 

 

EDIT:

@GeirGrusom:

Takk for svar, skjønner at du hater det "/

Den støtter: PHP, HTML, ASP og det vanlige =)

Endret av Gjest
Lenke til kommentar
Er det mulighet å gjøre om filnavnet på en måte? Slik at jeg ikke må ha det lange navnet slik det er i min URL? Så listbox1 har navnet: navn1

mens på FTP mappen er det: navn1-80784

 

ListBox fyller listen med ToString() verdien av innholdet, så det jeg pleier å gjøre, er å lage en struct eller class for hver item

 

Public Class UrlItem
 Private m_name As String
 Private m_uri As URI
 Public ReadOnly Property Name() As String
Get()
  Return m_name
End Get
 End Property
 Public ReadOnly Property Uri() As URI
Get()
  Return m_uri
End Get
 End Property
 Public Sub New(name As String, url As String)
m_name = name
m_uri = New Uri(url)
 End Sub
 Public Overrides Function ToString() As String
Return m_name
 End Function
End Class

Public Sub PopulateList()
 ListBox1.Items.Add(New UrlItem("En fil", "Http://www.enfil.rar")) ' Husk å ta med Http eller Ftp, veldig viktig!
End Sub

Endret av GeirGrusom
Lenke til kommentar

Takk for svar, men du sier at du trenger det for hver jeg item jeg har i listbox1?

Da må jeg se etter andre løsninger =(

 

EDIT:

 

Kan gjøre slik:

_Downloader.DownloadFileWithProgress(Baseurl & filnavn, txtDownloadTo.Text & "\" & navn.text & ".rar")

 

uthevet er en tekstboks brukeren selv kan skrive inn navnet på *.rar filen men hadde vært greit med ferdig i ListBox1 fra før av "/

Endret av Gjest
Lenke til kommentar
Eneste grunnen det er vanskelig for deg, er fordi du hardkoder det! Dette hadde vært kjempeenkelt hvis du kunne lese dataene fra en tekstfil, da er det bare et par linjer med kode for å legge inn uendelig antall i listboxen.

Selvfølgelig kan alt ligge i en tekstfil for å så laste det inn til listboxen. Men uansett vil jeg støtte problemet der jeg må laste ned filen fordi jeg gjør slik:

 

		Dim Baseurl As String = "http://minside.com/filer"

	If Not IO.Directory.Exists(txtDownloadTo.Text) Then
		MessageBox.Show("Not a valid directory to download to, please pick a valid directory", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error)
	Else
		Try
			Dim filnavn As String = CStr(ListBox1.SelectedItem)
			_Downloader = New WebFileDownloader
			_Downloader.DownloadFileWithProgress(Baseurl & filnavn, txtDownloadTo.Text & "\" & navn.text & ".rar")
		Catch ex As Exception
			MessageBox.Show("Error: " & ex.Message)
		End Try
		Return
	End If

 

Så altså den tar Baseurl og setter navnet som er i listboxen til den url'en så den blir slik: http://minside.com/filer/navn1.rar

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...