Evento al click su una picture box

di il
8 risposte

Evento al click su una picture box

Ciao a tutti,

come state?

sono qui per chiedere aiuto:

ho un form con una pciture box, ogni volta che l'utilizzatore clicca sulla picture box inserisce un pallino giallo (che è un'altra picture box) nel punto esatto dove ha cliccato.

riporto il codice:

            Public pctMacchina() As PictureBox ' il pallino giallo che indica una macchina inserita
		
		Private Sub PictureBox_layout_Click(sender As Object, e As EventArgs) Handles PictureBox_layout.Click
			ReDim pctMacchina(nNumeroMacchine) ' ridefinisce la variabile con il numero di macchine già inserite
            pctMacchina(nNumeroMacchine) = New PictureBox
            Me.Controls.Add(pctMacchina(nNumeroMacchine)) ' aggiunge il pallino giallo al form come picture box
            pctMacchina(nNumeroMacchine).Top = MousePosition.Y - Me.Top - 36
            pctMacchina(nNumeroMacchine).Left = MousePosition.X - Me.Left - 14
            pctMacchina(nNumeroMacchine).Width = 10
            pctMacchina(nNumeroMacchine).Height = 10
            pctMacchina(nNumeroMacchine).Image = My.Resources.punto
            pctMacchina(nNumeroMacchine).BringToFront()
            Dim objWriterPunto As New IO.StreamWriter(pathData + "\pctMacchina.db", True) ' file di archivio delle macchine
            objWriterPunto.WriteLine(nNumeroMacchine & "|" & Convert.ToString(pctMacchina(nNumeroMacchine).Top) & "|" & Convert.ToString(pctMacchina(nNumeroMacchine).Left) & "|") ' aggiunge le coordinate della nuova macchina
            objWriterPunto.Close()
            nNumeroMacchine += 1
         end sub

fin qui tutto bene. Adesso voglio che quando l'utilizzatore clicca su uno dei pallini giallo (la picture box inserita con l'evento precedente) mi si apre un altro form.

come faccio?

la nuovo picture box dei pallini gialli non esiste nella lista degli eventi!

qualche suggerimento?

grazie di cuore.

ciao

Salvo

8 Risposte

  • Re: Evento al click su una picture box

    17/02/2024 - salvodv ha scritto:


    la nuovo picture box dei pallini gialli non esiste nella lista degli eventi!

    qualche suggerimento?

    Prendi un oggetto picture (picture campione), lo nascondi e scrivi l'evento.

    Quando crei le altre picture gli dici di usare l'evento della picture campione.

  • Re: Evento al click su una picture box

    Ma se uno clikka per inserire un pallino e invece clikka su un Pallino?

    Così solo per sapere…

  • Re: Evento al click su una picture box

    Innanzitutto ti consiglio di fare

    Public pctMacchina As New List(Of PictureBox) ' il pallino giallo che indica una macchina inserita

    e non di utilizzare un array di picturbox, quel “ReDim” sarebbe meglio evitarlo

    Per il tuo click sul pallino devi definire la routine che verrà chiamata, ad esempio:

        Private Sub pctMacchina_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
            ' routine che viene chiamata quando faccio click su una picturebox della macchina
            ' .............
            ' per capire quale macchina ha fatto click:
            Dim numeroMacchina As String = DirectCast(sender, PictureBox).Name
            ' ..... e faccio quello che devo fare
        End Sub

    e quindi modifichi il tutto in:

            Dim pctTmp = New PictureBox
            pctTmp.Image = My.Resources.punto
            pctTmp.Name = pctMacchina.Count.ToString ' parte da 0
            Me.Controls.Add(pctTmp) ' aggiunge il pallino giallo al form come picture box
            pctTmp.Top = MousePosition.Y - Me.Top - 36
            pctTmp.Left = MousePosition.X - Me.Left - 14
            pctTmp.Width = 10
            pctTmp.Height = 10
            pctTmp.BringToFront()
            Dim objWriterPunto As New IO.StreamWriter(pathData + "\pctMacchina.db", True) ' file di archivio delle macchine
            objWriterPunto.WriteLine(pctMacchina.Count & "|" & Convert.ToString(pctTmp.Top) & "|" & Convert.ToString(pctTmp.Left) & "|") ' aggiunge le coordinate della nuova macchina (occhio che qui parte da 1)
            objWriterPunto.Close()
            ' aggiungo la picturebox alla lista
            pctMacchina.Add(pctTmp)
            ' attiva la chiamata alla routine
            AddHandler pctTmp.Click, AddressOf pctMacchina_Click
  • Re: Evento al click su una picture box

    Ciao,

    rispondo a sihsandrea:

    Prendi un oggetto picture (picture campione), lo nascondi e scrivi l'evento.

    Quando crei le altre picture gli dici di usare l'evento della picture campione.

    significherebbe disseminare picture box non visibili in tutto il form e poi renderli visibili uno alla volta quando l'utilizzatore clicca sulla picture box di base… troppo complicato!

    Ma se uno clikka per inserire un pallino e invece clikka su un Pallino?

    Così solo per sapere…

    è quello che voglio gestire ;)

    ok SirJo, funziona bene. Grazie mille!

    C'è solo un piccolo problema che devo risolvere assolutamente: 

    Dim numeroMacchina As String = DirectCast(sender, PictureBox).Name

    questo non funziona… cioè il nome della picture box che ha scatenato l'evento click è vuoto. Mi spiego meglio, ho fatto così:

        Private Sub pctMacchine_click(ByVal sender As Object, ByVal e As EventArgs)
            frmMacchina.Show()
    
            Dim stMacchina As String = DirectCast(sender, PictureBox).Name
            MsgBox(stMacchina) ' serve solo per verificare cosa c'è in stMacchina
        End Sub
    

    beh, il MsgBox che appare è vuoto.

    come faccio a sapere quale picture box (pallino giallo) viene cliccato?

    ciao

  • Re: Evento al click su una picture box

    19/02/2024 - salvodv ha scritto:


    significherebbe disseminare picture box non visibili in tutto il form e poi renderli visibili uno alla volta quando l'utilizzatore clicca sulla picture box di base… troppo complicato!

    Leggi meglio… 

    Dici alla picture creata a runtime che l'evento è quello della picture da clonare.

    Lavori su quella da clonare (dimensioni ed eventi) quello che cambia ( cioè da indicare alla picture in runtime) è la posizione, l'eventuale contenuto il nome ecc…

    Per sapere chi viene clikkato ti rifai al nome.

    Io registrerei su una tabella l'id della picture, la picture la chiamerei mypicture+id .

    Nella tabella memorizzerei posizione, contenuto e nominativo di chi lo ha creato (idutente).

    Quando cliccki sull'oggetto dal nome prelevi la parte numerica e lo cerchi come id dalla tabella e da li risali a vita morte e miracoli

  • Re: Evento al click su una picture box

    Dimenticavo… su mousemove (o come si chiama l'evento) prendi il nome dell'oggetto e lo schiaffi in una variabile da li tutto il resto…

  • Re: Evento al click su una picture box

    Mio piccolo errore, modifica la riga in

    pctTmp.Name = "pct" & pctMacchina.Count.ToString ' parte da 0
  • Re: Evento al click su una picture box

    Ciao,

    funziona tutto… grazie mille.

    19/02/2024 - sihsandrea ha scritto:


    Leggi meglio… 

    Dici alla picture creata a runtime che l'evento è quello della picture da clonare.

    Lavori su quella da clonare (dimensioni ed eventi) quello che cambia ( cioè da indicare alla picture in runtime) è la posizione, l'eventuale contenuto il nome ecc…

    Per sapere chi viene clikkato ti rifai al nome.

    Io registrerei su una tabella l'id della picture, la picture la chiamerei mypicture+id .

    Nella tabella memorizzerei posizione, contenuto e nominativo di chi lo ha creato (idutente).

    Quando cliccki sull'oggetto dal nome prelevi la parte numerica e lo cerchi come id dalla tabella e da li risali a vita morte e miracoli

    hai ragione… avevo frainteso il tuo consiglio. Ho fatto come hai detto tu, anche se il primo suggerimento di SirJo funzionava bene comunque, daltronte era la stessa cosa… più o meno. Grazie.

    19/02/2024 - SirJo ha scritto:


    Mio piccolo errore, modifica la riga in

    pctTmp.Name = "pct" & pctMacchina.Count.ToString ' parte da 0

    pefetto! così funziona alla grande. Fa esattamente quello che mi serviva.

    grazie a tutti.

    ciao.

Devi accedere o registrarti per scrivere nel forum
8 risposte