Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
C# / VB.NET - Aprire un file da listbox
Forum - C# / VB.NET - Aprire un file da listbox

Pagine: [ 1 2 ] Precedente | Prossimo
Avatar
Cobra (Normal User)
Rookie


Messaggi: 29
Iscritto: 04/11/2011

Segnala al moderatore
Postato alle 18:06
Venerdì, 04/11/2011
Buonasera a tutti :D
sono un nuovo utente del forum  che è alle prese con vb 2008 :) . Vorrei sapere se, data una listbox contenente al suo interno tutti i file (in questo caso, i documenti word con estensione .doc) di una cartella, fare in modo che, una volta selezionato il file di interesse, esso venga aperto in MS Word.

Mi spiego meglio.

Allora, la listbox mi visualizza tutti i file .doc (file1.doc, file2.doc, file3.doc, ...) presenti in C:\

Codice sorgente - presumibilmente VB.NET

  1. Private Sub Word_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
  2. ListBox1.Items.AddRange(ListaFiles("C:\", "*.doc"))
  3. End Sub



Vi allego anche un'immagine del form che ho realizzato :)

Vorrei che, una volta abbia selezionato per esempio file1.doc, si avvii MS Word con il file che ho scelto.
Sperando di essere stato quanto più chiaro e preciso possibile, rimango in attesa di vostre notizie, ringraziovi tutti in anticipo. :k:


Cobra ha allegato un file: Listbox.jpg (39755 bytes)
Clicca qui per guardare l'immagine
PM Quote
Avatar
Renny (Normal User)
Expert


Messaggi: 231
Iscritto: 30/07/2011

Segnala al moderatore
Postato alle 18:24
Venerdì, 04/11/2011
Ciao..
Se cerchi in internet trovi tanti esempi.
Con il seguente codice:
Codice sorgente - presumibilmente Plain Text

  1. System.Diagnostics.Process.Start("C:\prova.doc")


Apri un nuovo processo, in questo caso viene aperto il file "prova.doc" con il programma deputato alla gestione dei file .doc, cioè word.
NB: devi passare il percorso per esteso del file.. Quindi, o lo salvi direttamente nell'item della tua list box, e allora puoi scrivere Listbox.selectedItem(0).text
(Item 0 selezionato della lista) oppure salvi il path del file da qualche parte e lo concateni al nome del file (elemento della lista selezionato), prima di far partire il processo.. Chiaro no? :k:
Ciao!

PM Quote
Avatar
R0gerBlack (Member)
Expert


Messaggi: 210
Iscritto: 10/06/2010

Segnala al moderatore
Postato alle 18:41
Venerdì, 04/11/2011
è molto semplice, basta che fai

Codice sorgente - presumibilmente VB.NET

  1. 'Nell'evento SelectedIndexChanged ovvero quando un elemento della ListBox viene clickato
  2. Private Sub ListBox1_SelectedIndexChanged(sender As System.Object, e As System.EventArgs) Handles ListBox1.SelectedIndexChanged
  3.         Process.Start(ListBox1.SelectedItem)
  4. 'Ovviamente però il percorso deve essere esistente
  5.     End Sub



Se il file "file1.doc" si trova nella cartella dove c'è il programma non c'è problema (utilizzi la directory di default), altrimenti dovrai ricavarla.

PM Quote
Avatar
Cobra (Normal User)
Rookie


Messaggi: 29
Iscritto: 04/11/2011

Segnala al moderatore
Postato alle 20:56
Venerdì, 04/11/2011
Allora, innanzitutto grazie per avermi dato già qualche input per me molto importante.

@Renny: penso che ho capito cosa vuoi dire (e soprattutto, correggimi se sbaglio :) ), nel senso che, per ogni documento word dovrei affiancare un processo per aprirlo (tipo una shell, sempre che non ho capito male), però i files ce li ho già visualizzati nella listbox; cioè, in C:\ io ho già detto alla listbox di visualizzarmi tutti i files con l'estensione .doc, per giunta (ma questo l'ho fatto per una mia comodità), ho escluso le estensioni dei file.

@R0gerBlack: ok, ma se volessi aprire nel percorso in cui stanno, come dovrei fare? Ho provato sia come hai detto te (ma non va perchè ovviamente il programma sta in un'altra cartella diversa da quella dei files) sia come ho postato qui di seguito, dandomi errore:

Codice sorgente - presumibilmente VB.NET

  1. Private Sub ListBox1_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ListBox1.SelectedIndexChanged
  2.         Process.Start("C:\" & ListBox1.SelectedItem)
  3.     End Sub



comunque, per essere ancor più chiaro, riposto il codice completo:

Codice sorgente - presumibilmente VB.NET

  1. Imports System
  2. Imports System.IO
  3. Imports System.Windows.Forms
  4.  
  5. Public Class Word
  6.     Private Function ListaFiles(ByVal Cartella As String, ByVal Estensione As String) As String()
  7.  
  8.         Dim i As Integer
  9.         Dim n As String
  10.         Dim f() As String = System.IO.Directory.GetFiles(Cartella, Estensione)
  11.  
  12.  
  13.         For i = 0 To f.Length - 1
  14.  
  15.             f(i) = f(i).Substring(f(i).LastIndexOf("\") + 1)
  16.  
  17.         Next
  18.  
  19.  
  20.         For i = 0 To f.Length - 1
  21.  
  22.             n = f(i).LastIndexOf(".")
  23.  
  24.             If n > 0 Then
  25.  
  26.                 f(i) = f(i).Remove(n)
  27.  
  28.             End If
  29.  
  30.         Next
  31.  
  32.         Return f
  33.  
  34.     End Function
  35.  
  36.     Private Sub Word_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
  37.         ListBox1.Items.AddRange(ListaFiles("C:\", "*.doc"))
  38.     End Sub
  39.  
  40.     Private Sub ListBox1_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ListBox1.SelectedIndexChanged
  41.         Process.Start("C:\" & ListBox1.SelectedItem)
  42.     End Sub
  43. End Class


PM Quote
Avatar
Renny (Normal User)
Expert


Messaggi: 231
Iscritto: 30/07/2011

Segnala al moderatore
Postato alle 21:31
Venerdì, 04/11/2011
Testo quotato

Postato originariamente da Cobra:
Codice sorgente - presumibilmente VB.NET

  1. Private Sub ListBox1_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ListBox1.SelectedIndexChanged
  2.         Process.Start("C:\" & ListBox1.SelectedItem)
  3.     End Sub




Ciao. L'errore nel codice che hai postato è che ListBox1.SelectionItem ti restituisce l'oggetto Item selezionato nella tua listbox. A te invece serve il "testo" di quel item selezionato, che di default viene restituito col metodo ToString e che rappresenta il nome del tuo file. Io nel evento Selected Index Change metterei questo:
Codice sorgente - presumibilmente VB.NET

  1. If Not ListBox1.SelectedItem Is Nothing then
  2.            Process.Start("C:\" & ListBox1.SelectedItem.Tostring) ' Nota il ToString
  3.      End If


Ciao:k:
PS: si, hai capito giusto, in VB.NET non hai le shell ma si parla di processi, che tramite il tuo programma puoi creare, sospendere e distruggere.. Gli stessi processi che vedi nel tuo TaskManager..
Altra cosa.. Per Togliere l'esensione e il path ai tuoi file doc, che carichi nella listBox esiste il Namespace System.IO e la classe Path che offrono funzioni apposite. Il risultato è lo stesso, ma il codice è più pulito ed elegante

Ultima modifica effettuata da Renny il 04/11/2011 alle 21:39
PM Quote
Avatar
R0gerBlack (Member)
Expert


Messaggi: 210
Iscritto: 10/06/2010

Segnala al moderatore
Postato alle 22:04
Venerdì, 04/11/2011
Testo quotato

Postato originariamente da Renny:

Ciao. L'errore nel codice che hai postato è che ListBox1.SelectionItem ti restituisce l'oggetto Item selezionato nella tua listbox. A te invece serve il "testo" di quel item selezionato, che di default viene restituito col metodo ToString e che rappresenta il nome del tuo file. Io nel evento Selected Index Change metterei questo:

     If Not ListBox1.SelectedItem Is Nothing then
           Process.Start("C:\" & ListBox1.SelectedItem.Tostring) ' Nota il ToString
     End If




Io ho fatto un test con l'IDE a mettere un Item chiamato "calc.exe" e col mio codice funziona perfettamente :-|:-| Secondo me Cobra ha sbagliato soltanto a ricavare le directory dei file Word.

@Cobra ti consiglio semplicemente di mettere la directory di quei file negli Item del Listbox e non file1.doc, file2.doc...

PM Quote
Avatar
Cobra (Normal User)
Rookie


Messaggi: 29
Iscritto: 04/11/2011

Segnala al moderatore
Postato alle 9:35
Sabato, 05/11/2011
Allora ragazzi, ho fatto come mi avete consigliato di fare, solo che mi viene riportato un errore dove dice che non riesce a trovare il file nel percorso specificato.

Nonostante ciò, ho provato ad inserire questo codice:

Codice sorgente - presumibilmente VB.NET

  1. Private Sub Word_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
  2.         ListBox1.Items.AddRange(ListaFiles("C:\", "*.doc"))
  3.     End Sub
  4.    
  5.  
  6.     Private Sub ListBox1_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ListBox1.SelectedIndexChanged
  7.         Process.Start("C:\Program Files (x86)\Microsoft Office\Office12\winword.exe", "C:\" & ListBox1.SelectedItem().ToString())
  8.     End Sub



apparentemente potrebbe essere ok ma:

- Si apre word con due finestre in successione, la prima dice che è impossibile trovare file.doc mentre l'altra successiva dice che è impossibile trovare 1.doc (vi allego le immagini per essere più preciso). Ho notato comunque che, se per esempio, vada a rinominare "file 1.doc" in "file1.doc" (cioè, eliminando lo spazio che intercorre tra file ed 1), word mi apre il documento senza problemi.

- Ho provato (ma solo per verificare se tale problema era solo riscontrato in Word), ad aprire un file mp3 con Windows Media Player:

Codice sorgente - presumibilmente VB.NET

  1. Private Sub Word_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
  2.         ListBox1.Items.AddRange(ListaFiles("C:\Musica", "*.mp3"))
  3.     End Sub
  4.    
  5.  
  6.  
  7.     Private Sub ListBox1_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ListBox1.SelectedIndexChanged
  8.         Process.Start("C:\Program Files (x86)\Windows Media Player\wmplayer.exe", "C:\Musica" & ListBox1.SelectedItem().ToString())
  9.     End Sub



Risultato? Beh, anche qui vi allego un'immagine di quanto mi viene riportato da WMP, ovvero riconosce il file con estensione "." :-| assurdo!!! Comunque ragazzi, al di la che forse anzi sicuramente sto uscendo di "zucca", resta il fatto che non posso rinominare tutti i documenti, altrimenti non basteranno nemmeno 350 anni + iva :rotfl: come si può ovviare a tale problema?

Eccovi i link per visualizzare le immagini con gli errori:

http://img23.imageshack.us/img23/544/errorewmp.jpg

http://img151.imageshack.us/img151/4729/erroreword1.jpg

http://img97.imageshack.us/img97/6404/erroreword2.jpg

PM Quote
Avatar
R0gerBlack (Member)
Expert


Messaggi: 210
Iscritto: 10/06/2010

Segnala al moderatore
Postato alle 13:26
Sabato, 05/11/2011
Nella seconda immagine dice "Impossibile trovare il file (C:\file1.doc)

ma sei sicuro che sia proprio lì? Devi accertarti della directory, il codice mi sembra corretto, devi solo aggiustare il modo di ricavare il percorso

PM Quote
Avatar
Cobra (Normal User)
Rookie


Messaggi: 29
Iscritto: 04/11/2011

Segnala al moderatore
Postato alle 13:57
Sabato, 05/11/2011
Testo quotato

Postato originariamente da R0gerBlack:

Nella seconda immagine dice "Impossibile trovare il file (C:\file1.doc)

ma sei sicuro che sia proprio lì? Devi accertarti della directory, il codice mi sembra corretto, devi solo aggiustare il modo di ricavare il percorso



No, aspetta, guarda bene l'immagine :) , dice che non trova "file.doc" non "file1.doc", infatti, se noti, poi apre l'altro messaggio (l'immagine successiva di word, tanto per intenderci) dove dice che non trova 1.doc, per giunta in una posizione diversa da quella che ho inserito io, perchè il primo messaggio centra il percorso ma sbaglia nome del file, il secondo messaggio, sbaglia sia il percorso che il nome del file.

Sicurissimo, il percorso del file è:

C:\file 1.doc

così anche come gli altri. Ma il fatto è, perchè se unisco file ed 1 me lo carica (cioè, rinominare in file1.doc), invece, se rimane file 1.doc (file(spazio)1.doc) con lo spazio tra file ed 1 non va? Sembra come se il processo da me creato "odiasse" gli spazi immessi nel nome di ciascun file e durante la ricerca di esso va in "tilt", perchè, secondo lui, vuole trovare prima "file.doc" e poi "1.doc", non riesce a "vedere" il nome per intero (cioè file(spazio)1.doc) ed aprirlo, scusami per il giro di parole, ma più chiaro di così non riesco ad essere :)

Punto secondo :) : perchè poi WMP mi appare quel messaggio? Cioè, quando ho fatto la "controprova", modificando il codice per tentare di aprire il file mp3 con WMP (come ho postato prima), anche se il file mp3 è correttamente visualizzato nella listbox (e qui non centra neanche lo spazio che può esistere o meno all'interno del nome del file), lo seleziono, parte WMP però appare quel messaggio (vedi il link "...\errorewmp.jpg"), ovviamente se io poi clicco si, mi dice che è impossibile riprodurre il file. A questo punto, cosa mi consigliate di fare, o meglio, cosa fareste al mio posto? C'è qualche parte del codice che è errata? Sto andando nel pallone!!! :om: :om: :om:

PM Quote
Pagine: [ 1 2 ] Precedente | Prossimo