Risolto ListView aprire PDF associato alla scelta

essekappa

Utente abituale
18 Novembre 2015
127
16
udine
2010
1
Buongiorno,
alla mia età di ultrasessantenne mi sono messo ad interessarmi di Visual Basic.
Uso il VB 2010 express ed ho questo problema.
In una ListView ho un elenco di tot voci, e con un tasto effetuo una ricerca.
Volevo associare alle voci della ricerca, l'apertura di un file pdf.
Nel listato che allego, mi viene restituito un errore.

Si può effetuare ciò??

Grazie



Codice:
Public Class Form1
Codice:
Private Sub carica()
        With Me.ListView1
            .Clear()
            .Items.Add("LM311")
            .Items.Add("LM317")
            .Items.Add("LM35")
            .Items.Add("LF351")
            .Items.Add("L290")
            .Items.Add("L298")
            .Items.Add("TIP117")
            .Items.Add("TIL311")
            .Items.Add("U111")
        End With
    End Sub
Codice:
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        carica()
    End Sub
Codice:
 Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnCerca.Click
Codice:
 carica()
        For Each item As ListViewItem In ListView1.Items
            Dim tx As String = item.SubItems(0).Text
            Dim tr As String = TextBox1.Text.Trim.ToLower
            If Not String.IsNullOrEmpty(tr) Then
                If tx.ToLower.IndexOf(tr) < 0 Then item.Remove()
            End If
        Next item
    End Sub
Codice:
 Private Sub btnReset_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnReset.Click
        carica()
    End Sub
Codice:
Private Sub ListView1_SelectedIndexChanged(sender As System.Object, e As System.EventArgs) Handles ListView1.SelectedIndexChanged
Codice:
Process.Start("C:\datasheet\" & ListView1.SelectedItems().ToString())
    End Sub
End Class
 
Ultima modifica di un moderatore:

alfrimpa

VBA Expert
Supermoderatore
Expert
18 Dicembre 2015
19.313
713
66
Napoli
2013
356
E @essekappa

Ti ricordo che il codice va inserito tra i TAG CODE; per come fare guarda gli avvisi dello staff (stavolta ho provveduto io).
 
  • Like
Reactions: essekappa

giulianovac

Access/VBA Expert
Expert
9 Giugno 2018
2.233
83
Italy
2013 2019
166
Era una condizione che non sapevo
Bastava leggere il Regolamento, è scritto nel paragrafo:
Regola nr 6 "scrivere nei post e non nell'allegato"

Ti raccomando inoltre di leggere gli utilissimi:
Avvisi dallo staff del forum

Tutte cose che dal 2015 mi pare strano che tu non sappia ancora.

Nel listato che allego, mi viene restituito un errore.
Devi indicare quale errore e dove si verifica (l'istruzione che lo genera).
Un progetto VB.NET, per sua natura, non può essere ricostruito solo mostrando stralci di codice, quindi dovresti allegare un progetto di test che riproduca il problema, perché a volte gli errori non sono facilmente individuabili.
Se poi non si sa che tipo di errore e quale riga lo genera diventa praticamente impossibile dare suggerimenti mirati.
my_Drinks
 
  • Like
Reactions: essekappa

essekappa

Utente abituale
18 Novembre 2015
127
16
udine
2010
1
Era una condizione che non sapevo
Bastava leggere il Regolamento, è scritto nel paragrafo:
Regola nr 6 "scrivere nei post e non nell'allegato"

Ti raccomando inoltre di leggere gli utilissimi:
Avvisi dallo staff del forum

Tutte cose che dal 2015 mi pare strano che tu non sappia ancora.

Nel listato che allego, mi viene restituito un errore.
Devi indicare quale errore e dove si verifica (l'istruzione che lo genera).
Un progetto VB.NET, per sua natura, non può essere ricostruito solo mostrando stralci di codice, quindi dovresti allegare un progetto di test che riproduca il problema, perché a volte gli errori non sono facilmente individuabili.
Se poi non si sa che tipo di errore e quale riga lo genera diventa praticamente impossibile dare suggerimenti mirati.
my_Drinks
Scusa la mia inesperienza, quello che avevo allegato non era uno stralcio del codice, ma il codice intero. Comunque, non avendolo mai fatto, come posso allegare un progetto di test? o per favore indicami dove leggere per poterlo fare.

Grazie della collaborazione
 

giulianovac

Access/VBA Expert
Expert
9 Giugno 2018
2.233
83
Italy
2013 2019
166
L'ho tovato da solo. Lingua_lingua

Sei sicuro di aver scelto il controllo giusto? :dubbioso:
Te lo chiedo perché il progetto l'hai nominato ricerca listbox mentre stai usando un ListView.
Anche perché in un ListView devi aggiungere PRIMA le colonne, e tu non lo fai.

Nell'evento Carica() dovresti :
1) aggiungere anche almeno la prima colonna:
.Columns.Add("Nome file", 200)

2) ed impostare la visualizzazione report
.View = View.Details

Vieniamo all'errore
il problema è che quando si seleziona un elemento e poi si seleziona un elemento diverso, l'evento SelectedIndexChanged viene generato due volte.
La prima volta è quando l'elemento esistente è deselezionato, quindi a quel punto non ci sono SelectedItems, motivo per cui si genera l'eccezione.
Nel gestore di eventi (SelectedIndexChanged) devi controllare che ci sia almeno un oggetto SelectedItem prima di indicizzare la proprietà. In questo modo ignorerai semplicemente il primo evento e poi agirai solo sul secondo, quando viene selezionato il nuovo oggetto.

In terzo luogo, devi prima verificare che il file esista, altrimenti generi un ulteriore eccezione.
Questo è il codice che dovresti usare nell'evento SelectedIndexChanged:

Visual Basic:
 Private Sub ListView1_SelectedIndexChanged(sender As System.Object, e As System.EventArgs) Handles ListView1.SelectedIndexChanged
        Dim myItem As String = vbNullString
        If Me.ListView1.SelectedItems.Count > 0 Then ' se c'è almeno un item selezionato
            myItem = ListView1.SelectedItems(0).Text ' ottengo il nome
        Else
            Exit Sub
        End If

        If My.Computer.FileSystem.FileExists("C:\datasheet\" & myItem) Then ' verifico che esista
            Process.Start("C:\datasheet\" & myItem)
        Else ' avviso l'utente
            MessageBox.Show("File non trovato" & vbCrLf & "C:\datasheet\" & myItem)
        End If
    End Sub

End Sub
 
  • Like
Reactions: essekappa

essekappa

Utente abituale
18 Novembre 2015
127
16
udine
2010
1
L'ho tovato da solo. Lingua_lingua

Sei sicuro di aver scelto il controllo giusto? :dubbioso:
Te lo chiedo perché il progetto l'hai nominato ricerca listbox mentre stai usando un ListView.
Anche perché in un ListView devi aggiungere PRIMA le colonne, e tu non lo fai.

Nell'evento Carica() dovresti :
1) aggiungere anche almeno la prima colonna:
.Columns.Add("Nome file", 200)

2) ed impostare la visualizzazione report
.View = View.Details

Vieniamo all'errore
il problema è che quando si seleziona un elemento e poi si seleziona un elemento diverso, l'evento SelectedIndexChanged viene generato due volte.
La prima volta è quando l'elemento esistente è deselezionato, quindi a quel punto non ci sono SelectedItems, motivo per cui si genera l'eccezione.
Nel gestore di eventi (SelectedIndexChanged) devi controllare che ci sia almeno un oggetto SelectedItem prima di indicizzare la proprietà. In questo modo ignorerai semplicemente il primo evento e poi agirai solo sul secondo, quando viene selezionato il nuovo oggetto.

In terzo luogo, devi prima verificare che il file esista, altrimenti generi un ulteriore eccezione.
Questo è il codice che dovresti usare nell'evento SelectedIndexChanged:

Visual Basic:
 Private Sub ListView1_SelectedIndexChanged(sender As System.Object, e As System.EventArgs) Handles ListView1.SelectedIndexChanged
        Dim myItem As String = vbNullString
        If Me.ListView1.SelectedItems.Count > 0 Then ' se c'è almeno un item selezionato
            myItem = ListView1.SelectedItems(0).Text ' ottengo il nome
        Else
            Exit Sub
        End If

        If My.Computer.FileSystem.FileExists("C:\datasheet\" & myItem) Then ' verifico che esista
            Process.Start("C:\datasheet\" & myItem)
        Else ' avviso l'utente
            MessageBox.Show("File non trovato" & vbCrLf & "C:\datasheet\" & myItem)
        End If
    End Sub

End Sub
Ti ringrazio della risposta, ma ora sono lontano dal pc, e mi sa che rivedrò il tutto dopo Pasqua (a proposito tanti auguri).
Per quanto riguarda il nome del progetto inizialmente era ListBox anche se poi ho usato ListView. Nel caso avessi usato ListBox, la cosa poteva essere più semplice??

A risentirci
 

essekappa

Utente abituale
18 Novembre 2015
127
16
udine
2010
1
L'ho tovato da solo. Lingua_lingua

Sei sicuro di aver scelto il controllo giusto? :dubbioso:
Te lo chiedo perché il progetto l'hai nominato ricerca listbox mentre stai usando un ListView.
Anche perché in un ListView devi aggiungere PRIMA le colonne, e tu non lo fai.

Nell'evento Carica() dovresti :
1) aggiungere anche almeno la prima colonna:
.Columns.Add("Nome file", 200)

2) ed impostare la visualizzazione report
.View = View.Details

Vieniamo all'errore
il problema è che quando si seleziona un elemento e poi si seleziona un elemento diverso, l'evento SelectedIndexChanged viene generato due volte.
La prima volta è quando l'elemento esistente è deselezionato, quindi a quel punto non ci sono SelectedItems, motivo per cui si genera l'eccezione.
Nel gestore di eventi (SelectedIndexChanged) devi controllare che ci sia almeno un oggetto SelectedItem prima di indicizzare la proprietà. In questo modo ignorerai semplicemente il primo evento e poi agirai solo sul secondo, quando viene selezionato il nuovo oggetto.

In terzo luogo, devi prima verificare che il file esista, altrimenti generi un ulteriore eccezione.
Questo è il codice che dovresti usare nell'evento SelectedIndexChanged:

Visual Basic:
 Private Sub ListView1_SelectedIndexChanged(sender As System.Object, e As System.EventArgs) Handles ListView1.SelectedIndexChanged
        Dim myItem As String = vbNullString
        If Me.ListView1.SelectedItems.Count > 0 Then ' se c'è almeno un item selezionato
            myItem = ListView1.SelectedItems(0).Text ' ottengo il nome
        Else
            Exit Sub
        End If

        If My.Computer.FileSystem.FileExists("C:\datasheet\" & myItem) Then ' verifico che esista
            Process.Start("C:\datasheet\" & myItem)
        Else ' avviso l'utente
            MessageBox.Show("File non trovato" & vbCrLf & "C:\datasheet\" & myItem)
        End If
    End Sub

End Sub
Ti ringrazio della risposta, ma ora sono lontano dal pc, e mi sa che rivedrò il tutto dopo Pasqua (a proposito tanti auguri).
Per quanto riguarda il nome del progetto inizialmente era ListBox anche se poi ho usato ListView. Nel caso avessi usato ListBox, la cosa poteva essere più semplice??

A risentirci
Ho avuto poco tempo ed ho fatto la modifica molto velocemente e sembra funzionare. Mi riservo di verificare dopo le vacanze per poi poter mettere RISOLTO.
Ultima cosa al volo... nella colonna nome file ho dovuto inserire i file con la loro estensione (.pdf in questo caso): è possibile nella listview non far comparire .pdf a fianco del nome del file??

Grazie
 
Ultima modifica:

essekappa

Utente abituale
18 Novembre 2015
127
16
udine
2010
1
giulianovac @giulianovac
Grazie per la ramanzina sull'overquoting, me la sono meritata!!

Come detto in precedenza, sembra che tutto funzioni, solo che non ho capito cosa intendi con
Certo.
D'altra parte è così che hai pubblicato il progetto (senza estensione).
cioè, io nella listview mi ritrovo i nomi dei file con accanto .pdf che non vorrei fosse visualizzato. Non capisco cosa vuoi dire con "il progetto (senza estensione).

Ringrazio per la pazienza
 

essekappa

Utente abituale
18 Novembre 2015
127
16
udine
2010
1
[/QUOTE]
Intendo dire che nel progetto che hai pubblicato nella Sub carica() hai aggiunto tutti gli item senza alcuna estensione.
[/QUOTE]

Buondì,
si è vero, nell'esempio che avevo allegato, avevo inserito gli item senza estensione. Ora, modificando, ho messo l'estensione .pdf la quale, però, mi compare anche nella ListView (che io non vorrei). Si potrebbe fare in modo che non compaia??

Grazie
 

essekappa

Utente abituale
18 Novembre 2015
127
16
udine
2010
1
OK, ma se la ommetto, cliccando sulla voce selezionata non mi apre il corrispondente file PDF.
Non inserendola nel listview, chiaro che dovrai aggiungerla da codice quando apri il file.
Devi scusarmi, ma io davo per scontato che tu lo sapessi già. :unsure:
Ti ringrazio della risposta, ma (scusa la mia ignoranza) non ho comunque ancora capito come aggiungerla da codice.
 

Sostieni ForumExcel

Aiutaci a sostenere le spese e a mantenere online la community attraverso una libera donazione!