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 - Problema con controlli creati da codice Vb.net
Forum - C# / VB.NET - Problema con controlli creati da codice Vb.net

Avatar
Garden (Normal User)
Newbie


Messaggi: 18
Iscritto: 17/07/2012

Segnala al moderatore
Postato alle 17:24
Mercoledì, 28/11/2012
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 :)

PM Quote
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 6402
Iscritto: 03/01/2010

Segnala al moderatore
Postato alle 18:30
Mercoledì, 28/11/2012
Assegna il percorso e il nome alla proprietà Tag della PictureBox.

Quando ti serve, la usi per visualizzare il percorso


Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
---
Il grande studioso italiano Bruno de Finetti ( uno dei padri fondatori del moderno Calcolo delle probabilità ) chiamava il gioco del Lotto Tassa sulla stupidità.
PM Quote
Avatar
Garden (Normal User)
Newbie


Messaggi: 18
Iscritto: 17/07/2012

Segnala al moderatore
Postato alle 19:47
Mercoledì, 28/11/2012
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...

Codice sorgente - presumibilmente VB.NET

  1. Public Class Form1
  2.     Public WithEvents PICT As PictureBox
  3.  
  4.     Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
  5.  
  6.         Dim ordinate As Integer = 32
  7.         Dim X As Integer = 1
  8.         For Each file As String In My.Computer.FileSystem.GetFiles("C://Prova", FileIO.SearchOption.SearchTopLevelOnly, "*.exe")
  9.             Dim PICT As New PictureBox
  10.             AddHandler PICT.Click, AddressOf PICT_Click
  11.             PICT.Name = "Pict_" & X
  12.             PICT.Image = Drawing.Icon.ExtractAssociatedIcon(file).ToBitmap
  13.             PICT.Location = New Point(10, ordinate)
  14.             PICT.Tag = file
  15.             PICT.Size = New Size(32, 32)
  16.             Me.Controls.Add(PICT)
  17.             X = X + 1
  18.             ordinate = ordinate + 48
  19.         Next
  20.     End Sub
  21.  
  22.     Public Sub PICT_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles PICT.Click
  23.         Dim PICT As New PictureBox '(?)
  24.         MsgBox(PICT.Tag)
  25.     End Sub
  26. End Class


PM Quote
Avatar
ampeg (Normal User)
Pro


Messaggi: 124
Iscritto: 21/04/2011

Segnala al moderatore
Postato alle 20:23
Mercoledì, 28/11/2012
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

Codice sorgente - presumibilmente VB.NET

  1. Private Sub PICT_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
  2.  
  3.         MessageBox.Show(CType(sender, PictureBox).Tag)
  4.  
  5.     End Sub
  6.  
  7. End Class




PM Quote
Avatar
Qwertj (Dev Team)
Guru


Messaggi: 678
Iscritto: 30/05/2011

Segnala al moderatore
Postato alle 19:20
Giovedì, 29/11/2012
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
Codice sorgente - presumibilmente C# / VB.NET

  1. Dim PICT As New PictureBox
  2. MsgBox(PICT.Tag)



Consiglio: usa Messagebox.Show invece di MsgBox, che è il vecchio metodo VB6

PM Quote
Avatar
Garden (Normal User)
Newbie


Messaggi: 18
Iscritto: 17/07/2012

Segnala al moderatore
Postato alle 18:11
Sabato, 01/12/2012
Risolto, grazie a tutti :)

PM Quote