Oppure

Loading
04/11/11 17:06
Cobra
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:\

Private Sub Word_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
ListBox1.Items.AddRange(ListaFiles("C:\", "*.doc"))
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:
aaa
04/11/11 17:24
Renny
Ciao..
Se cerchi in internet trovi tanti esempi.
Con il seguente codice:
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!
aaa
04/11/11 17:41
R0gerBlack
è molto semplice, basta che fai

'Nell'evento SelectedIndexChanged ovvero quando un elemento della ListBox viene clickato
Private Sub ListBox1_SelectedIndexChanged(sender As System.Object, e As System.EventArgs) Handles ListBox1.SelectedIndexChanged
        Process.Start(ListBox1.SelectedItem)
'Ovviamente però il percorso deve essere esistente
    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.
aaa
04/11/11 19:56
Cobra
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:

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


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

Imports System
Imports System.IO
Imports System.Windows.Forms

Public Class Word
    Private Function ListaFiles(ByVal Cartella As String, ByVal Estensione As String) As String()

        Dim i As Integer
        Dim n As String
        Dim f() As String = System.IO.Directory.GetFiles(Cartella, Estensione)


        For i = 0 To f.Length - 1

            f(i) = f(i).Substring(f(i).LastIndexOf("\") + 1)

        Next


        For i = 0 To f.Length - 1

            n = f(i).LastIndexOf(".")

            If n > 0 Then

                f(i) = f(i).Remove(n)

            End If

        Next

        Return f

    End Function

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

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

aaa
04/11/11 20:31
Renny
Postato originariamente da Cobra:
Private Sub ListBox1_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ListBox1.SelectedIndexChanged
        Process.Start("C:\" & ListBox1.SelectedItem)
    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:
     If Not ListBox1.SelectedItem Is Nothing then
           Process.Start("C:\" & ListBox1.SelectedItem.Tostring) ' Nota il ToString
     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 04/11/11 20:39
aaa
04/11/11 21:04
R0gerBlack
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...
aaa
05/11/11 8:35
Cobra
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:


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

    Private Sub ListBox1_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ListBox1.SelectedIndexChanged
        Process.Start("C:\Program Files (x86)\Microsoft Office\Office12\winword.exe", "C:\" & ListBox1.SelectedItem().ToString())
    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:


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


    Private Sub ListBox1_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ListBox1.SelectedIndexChanged
        Process.Start("C:\Program Files (x86)\Windows Media Player\wmplayer.exe", "C:\Musica" & ListBox1.SelectedItem().ToString())
    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:

img23.imageshack.us/img23/544/…

img151.imageshack.us/img151/4729/…

img97.imageshack.us/img97/6404/…
aaa
05/11/11 12:26
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
aaa