Questo sito utilizza cookies, anche di terze parti, per mostrare pubblicitÓ e servizi in linea con il tuo account. 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 :)


-Garden
PM Quote
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 5714
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



-Garden
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


Blog:
<coming soon>
Appalo:
http://www.appalo.it/
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 :)


-Garden
PM Quote