Oppure

Loading
28/11/12 16:24
Garden
Salve gente, ho un programma che all'apertura crea un tot di Picturebox a seconda di quanti file .exe ci sono in una determinata cartella, imposta come immagine l'icona di questi file e appena clicco una di queste Picturebox mi compare una Messagebox, fino a qua nessun problema,ma, nel momento in cui volessi che la Messagebox contenesse il percorso del file a cui appartiene l'icona mi fermo....perciò come si potrebbe fare?

Es. supponiamo che la cartella in questione sia "C:\prova" e che contenga "programma_a_caso.exe", una volta aperto il programma e caricata la bella icona di "programma_a_caso.exe" in una picturebox, ci clicco e mi deve dare una Messagebox contenente "C:\prova\programma_a_caso.exe"

Spero di essere stato chiaro, in caso vi do pure il sorgente :)
aaa
28/11/12 17:30
Assegna il percorso e il nome alla proprietà Tag della PictureBox.

Quando ti serve, la usi per visualizzare il percorso
28/11/12 18:47
Garden
Ci avevo già pensato ma la Messagebox mi spunta vuota, suppongo sia per aver dichiarato due volte la Picturebox ma non so come fare altrimenti...

Public Class Form1
    Public WithEvents PICT As PictureBox

    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load

        Dim ordinate As Integer = 32
        Dim X As Integer = 1
        For Each file As String In My.Computer.FileSystem.GetFiles("C://Prova", FileIO.SearchOption.SearchTopLevelOnly, "*.exe")
            Dim PICT As New PictureBox
            AddHandler PICT.Click, AddressOf PICT_Click
            PICT.Name = "Pict_" & X
            PICT.Image = Drawing.Icon.ExtractAssociatedIcon(file).ToBitmap
            PICT.Location = New Point(10, ordinate)
            PICT.Tag = file
            PICT.Size = New Size(32, 32)
            Me.Controls.Add(PICT)
            X = X + 1
            ordinate = ordinate + 48
        Next
    End Sub

    Public Sub PICT_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles PICT.Click
        Dim PICT As New PictureBox '(?)
        MsgBox(PICT.Tag)
    End Sub
End Class
aaa
28/11/12 19:23
ampeg
innanzi tutto togli la prima riga "Public WithEvents PICT As PictureBox" che non serve a niente in quanto l'handler lo aggiungi a runtime

poi togli "Handles PICT.Click" dalla dichiarazione della sub dell'evento in quanto è già referenziato nell' AddHandler

infine per gestire il controllo nella dichiarazione "PICT_Click" fai una conversione del tipo sull'oggetto sender

inoltre metti le procedure come private se non intendi usarle dall'esterno della classe

Private Sub PICT_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)

        MessageBox.Show(CType(sender, PictureBox).Tag)

    End Sub

End Class



aaa
29/11/12 18:20
Qwertj
Fai un casino... perchè continui a ridichiare PICT? La dichiari una sola volta, non globale, ma locale nel Form_Load, aggiungi gli handler e poi nell'handler ci accedi castando sender

La Messagebox ti esce vuota perchè ridichiari la PictureBox, ne crei una nuova che ovviamente parte con .Tag vuoto
Dim PICT As New PictureBox
MsgBox(PICT.Tag)


Consiglio: usa Messagebox.Show invece di MsgBox, che è il vecchio metodo VB6
aaa
01/12/12 17:11
Garden
Risolto, grazie a tutti :)
aaa