View Full Version : [VB.NET] Evento da codice ( RaiseEvent? )
Salve a tutti, vorrei sapere come fare in Visual Basic per "attivare" un evento da codice. Come quando si va sul form, eventi, e si fa doppio click sull'evento DragDrop ad esempio...
Posso farlo in questo modo manualmente certo, ma su 12 picturebox con 2 eventi ciascuna, se poi devo modificare qualcosa non vorrei rifare tutto :(
Provando ad attivare l'evento manualmente non riesco e mi chiede di usare "RaiseEvent".
Sono andato nella documentazione, e ho provato un po' a lavorarci su, ma non è uscito niente di concreto :stordita:
Sapete dirmi come fare per attivarli da codice ? :D
Grazie in anticipo :)
Posso farlo in questo modo manualmente certo, ma su 12 picturebox con 2 eventi ciascuna, se poi devo modificare qualcosa non vorrei rifare tutto :(
Provando ad attivare l'evento manualmente non riesco e mi chiede di usare "RaiseEvent".
Da quanto ho capito il tuo problema è che non vuoi, avendo una Form con N controlli dello stesso tipo, dover riscrivere N volte gli handler per ogni singolo evento...
RaiseEvent c'entra poco o nulla con questo, nel senso che il suo uso tipico è appunto quello di scatenare un evento "personalizzato" dichiarato in una propria classe...
Puoi fare molto di più con AddHandler . L'esempio classico della pulsantiera : ho una Form con 100 pulsanti ( classe Button ). Come gestire il Click su TUTTI i pulsanti con 4 righe di codice ?
Public Class Form1
Private Sub AlClickSuiPulsanti(ByVal sender As System.Object, ByVal e As System.EventArgs)
Dim B As Button = CType(sender, Button)
MsgBox("Hai fatto Click su " & B.Name)
End Sub
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
For Each B As Button In Me.Controls
AddHandler B.Click, AddressOf AlClickSuiPulsanti
Next
End Sub
End Class
;)
prima di tutto grazie per la risposta :)
rileggendo un po' quello che ho scritto forse non sono stato molto chiaro :stordita: ...
In pratica devo gestire il dragDrop sulle picturebox, clicco su una picturebox e trascino il "contenuto" su una picturebox vuota che la userà come immagine. (6 picturebox con immagini e 6 vuote)
Dovrei attivare l'evento "mousedown" e "mousemove" per le picturebox con l'immagine da trascinare, e attivare "dragdrop" e "dragenter" su quelle vuote che 'riceveranno' l'immagine. Invece che andare nel 'Design' del form, cliccare su 'eventi' e fare doppio click su "mousedown", "mousemove" ecc.. volevo farlo da codice. Come dire "picturebox1.dragdrop.enabled=true" e "picturebox1.dragenter.enabled=true" tanto per fare un esempio inesistente :D
Ho provato comunque a modificare il codice che hai postato ma così avrei altri problemi che non so come risolvere... :wtf: ( del tipo che mi considera anche tutte le picturebox dell'altro form che metto invisibile, e da un'eccezione :( )
il codice che ho provato a mettere è questo
private sub baidragdrop(ByVal sender As System.Object, ByVal e As DragEventArgs)
Dim A As PictureBox = CType(sender,PictureBox)
A.Image = e.Data.GetData(DataFormats.Bitmap)
end sub
private sub baidragenter(ByVal sender As System.Object, ByVal e As DragEventArgs)
Dim B As PictureBox = CType(sender,PictureBox)
If e.Data.GetDataPresent(DataFormats.Bitmap) Then
e.Effect = DragDropEffects.Move
Else
e.Effect = DragDropEffects.None
End If
end sub
For Each A As PictureBox In Me.Controls
AddHandler A.DragDrop, AddressOf baidragdrop
Next
For Each B As PictureBox In Me.Controls
AddHandler B.DragEnter, AddressOf baidragenter
Next
Semplicemente andrai a condizionare il comportamento degli handler a seconda del "tipo" di picturebox. Come ? Ad esempio impostando in modo opportuno la proprietà "Tag" ( che praticamente tutti i Controls hanno ), e interrogandola via codice, in modo tale che solo sulle box di tipo "drag" sarà possibile prendere le immagini, mentre sarà possibile incollarle solo sulle box di tipo "drop". Su tutte le altre box eventualmente presenti ( Tag = "" ) il drag/drop non sarà disponibile... ;)
ti ringrazio per la pazienza, ho provato a fare dei tentativi ma dava sempre quell'errore. Così preso da un attacco di "felicità" ho attivato tutti gli eventi dal 'Design' .
Ora però ho un altro problema :stordita: ... se puoi rispondermi bene, altrimenti aprirò un altro topic. Mi serve sapere il nome dell'immagine in una pictureBox, tipo un "picturebox1.image.getPath()" solo che mi pare di aver letto che non si può fare niente di simile :(
---------------
Ok, mentre stavo scrivendo m'è venuta l'illuminazione :D
devo confrontare l'immagine di due picturebox per verificare che siano uguali, poco fa ho scoperto per sbaglio il .getHashCode e ho cercato cos'era. Dopo di che mi è uscito questo: If (picturebox7.image.gethashcode = picturebox1.image.GetHashCode) Then
msgbox ("e")
Else [...]
e funziona :) ( ho capito il perchè, non vado a caso :p )
grazie ancora :)
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.