Autore Topic: drag and drop su array di oggetti  (Letto 1886 volte)

Offline Gilby

  • Gamberetto
  • *
  • Post: 20
    • Mostra profilo
drag and drop su array di oggetti
« il: 09 Maggio 2018, 16:51:57 »
Salve ragazzi!
Ho creato un array di oggetti di tipo PictureBox, una cosa del genere:

For i = 0 To max - 1
    For j = 0 To max - 1
 With pos[i, j] = New PictureBox(Me)
        .Background = Color.White
        .W =123
        .H = 123
        .x = 123
        .Y = 123
        .Drop = True
        .Picture = Picture.Load("nomeimg.xxx")
 
       
      End With
 next
next

Avete una soluzione per fare un drag and drop tra le varie picturebox dell'array?  Creando direttamente l'oggetto dal form mi basta creare semplicemente la funzione "public sub pictureboxX_mousedrag()", ho provato così ma nulla, ho provato altre soluzioni ma con scarso successo, grazie in anticipo a chi mi aiuterà.

Offline Gianluigi

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 4.243
  • Tonno verde
    • Mostra profilo
Re:drag and drop su array di oggetti
« Risposta #1 il: 09 Maggio 2018, 19:08:32 »
Potresti allegare un progettino che esemplifichi quello che vai cercando.
Sarà senz'altro colpa mia, ma non ho capito cosa vuoi fare  e cos'è che già hai.

 :ciao:
nuoto in attesa del bacio di una principessa che mi trasformi in un gambero azzurro

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.721
  • Ne mors quidem nos iunget
    • Mostra profilo
Re:drag and drop su array di oggetti
« Risposta #2 il: 09 Maggio 2018, 22:54:08 »
Avete una soluzione per fare un drag and drop tra le varie picturebox dell'array?

A mio avviso devi basarti soprattutto sul 2° esempio presente in questa agina della nostra WIKI:
http://www.gambas-it.org/wiki/index.php?title=Codice_essenziale_per_effettuare_il_Drag-Drop_di_un%27immagine
« Chiunque, non ricorrendo lo stato di necessità, nel proprio progetto Gambas fa uso delle istruzioni Shell o Exec, è punito con la sanzione pecuniaria da euro 20,00 a euro 60,00. »

Offline Gilby

  • Gamberetto
  • *
  • Post: 20
    • Mostra profilo
Re:drag and drop su array di oggetti
« Risposta #3 il: 10 Maggio 2018, 09:24:00 »
Potresti allegare un progettino che esemplifichi quello che vai cercando.
Sarà senz'altro colpa mia, ma non ho capito cosa vuoi fare  e cos'è che già hai.

 :ciao:

Certo, prima di tutto ho fatto un po' di confusione, è una matrice e non un array, devo creare questa matrice di picturebox come se fosse una dama, ho scritto giusto un codice di esempio.


Avete una soluzione per fare un drag and drop tra le varie picturebox dell'array?

A mio avviso devi basarti soprattutto sul 2° esempio presente in questa agina della nostra WIKI:
http://www.gambas-it.org/wiki/index.php?title=Codice_essenziale_per_effettuare_il_Drag-Drop_di_un%27immagine

L'avevo già vista ed ho già provato in questo modo, purtroppo non va, ho provato a dare un nome ad ogni elemento della matrice (es. .name=picturebox1) così da poter applicare l'esempio che hai condiviso, ma purtroppo nulla...

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.721
  • Ne mors quidem nos iunget
    • Mostra profilo
Re:drag and drop su array di oggetti
« Risposta #4 il: 10 Maggio 2018, 14:01:53 »
Potresti allegare un progettino che esemplifichi quello che vai cercando.

Certo, prima di tutto ho fatto un po' di confusione, è una matrice e non un array, devo creare questa matrice di picturebox come se fosse una dama, ho scritto giusto un codice di esempio.
Gianluigi ha inteso chiederti di mostrarci la parte "importante" del progetto, ossia il meccanismo da te escogitato per ottenere il Drag and Drop fra le varie PictureBox della matrice, non il codice per creare la matrice di PictureBox !



...ho provato a dare un nome ad ogni elemento della matrice (es. .name=picturebox1)
A mio avviso un punto fondamentale è l'assegnazione delle PictureBox ad un unico Gruppo di Eventi.
« Chiunque, non ricorrendo lo stato di necessità, nel proprio progetto Gambas fa uso delle istruzioni Shell o Exec, è punito con la sanzione pecuniaria da euro 20,00 a euro 60,00. »

Offline allegfede

  • Gran Maestro dei Gamberi
  • *****
  • Post: 738
    • Mostra profilo
Re:drag and drop su array di oggetti
« Risposta #5 il: 10 Maggio 2018, 14:13:07 »
tempo fa' ebbi un problema simile, risolsi "acchiappando" l'id dell'oggetto:
Codice: [Seleziona]
' Gambas class file

'per gestire i TASTI virtuali
Private Indice As Integer
Private ButtonMedia As New Button[]

Private Selezionato As Integer


Public Sub Button_AddMedia_Click()
Dim BT As Button

  With BT = New Button(ScrollView_TimeLine) As "Tasto"
    .Text = File.Name(FileChooser_Media.SelectedPath)
    .Tooltip = FileChooser_Media.SelectedPath
   
    If ButtonMedia.Count = 0 Then
      .Top = Label_start_time.Top + Label_start_time.Height + 1 'ma come e' che sembra vadano una dopo l'altra anche se non ho inserito il codice opportuno?
      Else
        .Top = ButtonMedia[ButtonMedia.Count - 1].Top + ButtonMedia[ButtonMedia.Count - 1].Height
    Endif
   
    .Left = Label_start_time.Left - 5
    .Font.Size = Me.Font.Size - 3
    .Width = Label_start_time.Width + 10
    .Border = 1

  End With

  ButtonMedia.Add(BT)
  Inc Indice

  'e sposta la label di fine programmazione in coda a questo ultimo evento ... aggiornando il display della fine
  Label_end_time.Top = ButtonMedia[ButtonMedia.Count - 1].Top + ButtonMedia[ButtonMedia.Count - 1].Height + 1
  Label_end_time.Text = DateAdd(CDate(Label_end_time.Tag), gb.Second, DurataInSecondi)   'mhhh se sommi con la fine oltre la mezzanotte da' errore!!!!!
  If Not (Label_end_time.Text Like "[0-2][0-9]:[0-5][0-9]:[0-5][0-9]") Then
    'se c'e' un errore probabilemnte e' perche'ì con questo video si scavalla la mezzanotte! Questo e' L'ULTIMO video che si puo' inserire per questa giornata!!!!
    ' Fine = (DateAdd(DateChooser_Giornata.Value, gb.Day, 1))
    ' Label_end_time.Text = Day(Fine) & "-" & Month(fine) & "-" & Year(fine)
    Label_end_time.Text = Format(DateAdd(DateChooser_Giornata.Value & " " & Label_end_time.Tag, gb.second, DurataInSecondi), "dd/mm/yyyy hh:nn:ss")
    Label_end_time.Background = Color.Red
    Label_end_time.Show
    Button_AddMedia.Enabled = False
    Else
        Label_end_time.Background = Color.LightForeground
        Label_end_time.Show
  Endif
  Label_end_time.Tag = Label_end_time.Text
 
  'SALVA l'ultima cartella aperta come default per la prossima esecuzione
  Settings["FileChooser/LastFolder"] = FileChooser_Media.SelectedPath
End



Public Sub Tasto_Click()
Dim BT As Button

  Selezionato = ButtonMedia.Find(Last)

  If Selezionato = -1 Then Return

    For Each bt In ButtonMedia
      bt.Font.Bold = False
    Next
 
  ButtonMedia[Selezionato].Font.Bold = True
 
End
se corri, morirai stanco (motto degli sniper)

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.721
  • Ne mors quidem nos iunget
    • Mostra profilo
Re:drag and drop su array di oggetti
« Risposta #6 il: 10 Maggio 2018, 14:25:13 »
Guardate........ il problema di Gilby - lo ripeto - sta nella mancata assegnazione di ogni PictureBox creata ad un unico Gruppo di Eventi (come descritto nel 2° esempio della pagina della Wiki da me sopra citata).
« Chiunque, non ricorrendo lo stato di necessità, nel proprio progetto Gambas fa uso delle istruzioni Shell o Exec, è punito con la sanzione pecuniaria da euro 20,00 a euro 60,00. »

Offline Gilby

  • Gamberetto
  • *
  • Post: 20
    • Mostra profilo
Re:drag and drop su array di oggetti
« Risposta #7 il: 10 Maggio 2018, 15:23:18 »
Potresti allegare un progettino che esemplifichi quello che vai cercando.

Certo, prima di tutto ho fatto un po' di confusione, è una matrice e non un array, devo creare questa matrice di picturebox come se fosse una dama, ho scritto giusto un codice di esempio.
Gianluigi ha inteso chiederti di mostrarci la parte "importante" del progetto, ossia il meccanismo da te escogitato per ottenere il Drag and Drop fra le varie PictureBox della matrice, non il codice per creare la matrice di PictureBox !



...ho provato a dare un nome ad ogni elemento della matrice (es. .name=picturebox1)
A mio avviso un punto fondamentale è l'assegnazione delle PictureBox ad un unico Gruppo di Eventi.

In poche parole devo creare una matrice come se fosse una dama, il meccanismo utilizzato è lo stesso dell'esempio che tu mi hai proposto, l'unica differenza è che non ho inserito le picturebox in un unico gruppo,



tempo fa' ebbi un problema simile, risolsi "acchiappando" l'id dell'oggetto:
Codice: [Seleziona]
' Gambas class file

'per gestire i TASTI virtuali
Private Indice As Integer
Private ButtonMedia As New Button[]

Private Selezionato As Integer


Public Sub Button_AddMedia_Click()
Dim BT As Button

  With BT = New Button(ScrollView_TimeLine) As "Tasto"
    .Text = File.Name(FileChooser_Media.SelectedPath)
    .Tooltip = FileChooser_Media.SelectedPath
   
    If ButtonMedia.Count = 0 Then
      .Top = Label_start_time.Top + Label_start_time.Height + 1 'ma come e' che sembra vadano una dopo l'altra anche se non ho inserito il codice opportuno?
      Else
        .Top = ButtonMedia[ButtonMedia.Count - 1].Top + ButtonMedia[ButtonMedia.Count - 1].Height
    Endif
   
    .Left = Label_start_time.Left - 5
    .Font.Size = Me.Font.Size - 3
    .Width = Label_start_time.Width + 10
    .Border = 1

  End With

  ButtonMedia.Add(BT)
  Inc Indice

  'e sposta la label di fine programmazione in coda a questo ultimo evento ... aggiornando il display della fine
  Label_end_time.Top = ButtonMedia[ButtonMedia.Count - 1].Top + ButtonMedia[ButtonMedia.Count - 1].Height + 1
  Label_end_time.Text = DateAdd(CDate(Label_end_time.Tag), gb.Second, DurataInSecondi)   'mhhh se sommi con la fine oltre la mezzanotte da' errore!!!!!
  If Not (Label_end_time.Text Like "[0-2][0-9]:[0-5][0-9]:[0-5][0-9]") Then
    'se c'e' un errore probabilemnte e' perche'ì con questo video si scavalla la mezzanotte! Questo e' L'ULTIMO video che si puo' inserire per questa giornata!!!!
    ' Fine = (DateAdd(DateChooser_Giornata.Value, gb.Day, 1))
    ' Label_end_time.Text = Day(Fine) & "-" & Month(fine) & "-" & Year(fine)
    Label_end_time.Text = Format(DateAdd(DateChooser_Giornata.Value & " " & Label_end_time.Tag, gb.second, DurataInSecondi), "dd/mm/yyyy hh:nn:ss")
    Label_end_time.Background = Color.Red
    Label_end_time.Show
    Button_AddMedia.Enabled = False
    Else
        Label_end_time.Background = Color.LightForeground
        Label_end_time.Show
  Endif
  Label_end_time.Tag = Label_end_time.Text
 
  'SALVA l'ultima cartella aperta come default per la prossima esecuzione
  Settings["FileChooser/LastFolder"] = FileChooser_Media.SelectedPath
End



Public Sub Tasto_Click()
Dim BT As Button

  Selezionato = ButtonMedia.Find(Last)

  If Selezionato = -1 Then Return

    For Each bt In ButtonMedia
      bt.Font.Bold = False
    Next
 
  ButtonMedia[Selezionato].Font.Bold = True
 
End

Mi leggo bene il tuo codice e ti faccio sapere se risolvo, grazie!

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.721
  • Ne mors quidem nos iunget
    • Mostra profilo
Re:drag and drop su array di oggetti
« Risposta #8 il: 10 Maggio 2018, 16:44:07 »
....l'unica differenza è che non ho inserito le picturebox in un unico gruppo,

Puoi anche differenziare i "Gruppi" degli Eventi, senza inficiare il funzionamento principale desiderato, utilizzando per i diversi raggruppamenti di PictureBox il Metodo .Attach( ) della Classe Object.
« Ultima modifica: 09 Giugno 2023, 21:23:53 da vuott »
« Chiunque, non ricorrendo lo stato di necessità, nel proprio progetto Gambas fa uso delle istruzioni Shell o Exec, è punito con la sanzione pecuniaria da euro 20,00 a euro 60,00. »

Offline Gianluigi

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 4.243
  • Tonno verde
    • Mostra profilo
Re:drag and drop su array di oggetti
« Risposta #9 il: 10 Maggio 2018, 19:04:32 »
Intanto potresti dare un'occhiata a questa finestra, se la vedi come da immagine allora puoi seguire i suggerimenti di vuott sugli spostamenti (drag e drop) e guardare anche questo , pensare a come limitare gli spostamenti in base al pezzo; ad esempio il cavallo si trova in 4x4 (contando da zero) le caselle a disposizione per lo spostamento, se libere dai pezzi bianchi, sono:
2x3 e 2x5 - 3x2 e 3x6 - 5x2 e 5x6 - 6x3 e 6x5.
Poi ... e poi...

Si lo so il cavallo fa schifo e anche la tastiera...  ;D

 :ciao: :ciao:
« Ultima modifica: 10 Maggio 2018, 19:07:22 da Gianluigi »
nuoto in attesa del bacio di una principessa che mi trasformi in un gambero azzurro

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.721
  • Ne mors quidem nos iunget
    • Mostra profilo
Re:drag and drop su array di oggetti
« Risposta #10 il: 10 Maggio 2018, 19:42:14 »
Si lo so il cavallo fa schifo ....

Ti sei fatto "auto-scacco matto" !    ;D
« Ultima modifica: 10 Maggio 2018, 19:51:51 da vuott »
« Chiunque, non ricorrendo lo stato di necessità, nel proprio progetto Gambas fa uso delle istruzioni Shell o Exec, è punito con la sanzione pecuniaria da euro 20,00 a euro 60,00. »

Offline Gilby

  • Gamberetto
  • *
  • Post: 20
    • Mostra profilo
Re:drag and drop su array di oggetti
« Risposta #11 il: 11 Maggio 2018, 10:48:25 »
Intanto potresti dare un'occhiata a questa finestra, se la vedi come da immagine allora puoi seguire i suggerimenti di vuott sugli spostamenti (drag e drop) e guardare anche questo , pensare a come limitare gli spostamenti in base al pezzo; ad esempio il cavallo si trova in 4x4 (contando da zero) le caselle a disposizione per lo spostamento, se libere dai pezzi bianchi, sono:
2x3 e 2x5 - 3x2 e 3x6 - 5x2 e 5x6 - 6x3 e 6x5.
Poi ... e poi...

Si lo so il cavallo fa schifo e anche la tastiera...  ;D

 :ciao: :ciao:

Mi sa che la tua è la migliore soluzione, non avevo pensato alla griglia!! Oggi provo con questa!! Grazie mille!!

Offline Gianluigi

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 4.243
  • Tonno verde
    • Mostra profilo
Re:drag and drop su array di oggetti
« Risposta #12 il: 11 Maggio 2018, 12:03:34 »
Naturalmente la mia era solo una dimostrazione per far comprendere il meccanismo.
Immagino che la finestra dovrà contenere altre cose oltre la scacchiera, dovrai usare un altro contenitore che non sia la Form io consiglierei la drawing area.
Prima ti devi studiare bene il funzionamento dei contenitori nelle form che poi è la peculiarità e la forza di Gambas.
Se invece decidi di usare una finestra a parte tipo la dimostrazione allora cerca di dare tutte le misure tramite codice per evitarti sorprese in fase di visualizzazione tra le diverse distro.
 
:ciao: :ciao:
nuoto in attesa del bacio di una principessa che mi trasformi in un gambero azzurro

Offline Gianluigi

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 4.243
  • Tonno verde
    • Mostra profilo
Re:drag and drop su array di oggetti
« Risposta #13 il: 11 Maggio 2018, 23:36:02 »
Da una febbricitante idea di vuott  ;D

Vedi file allegato

 :ciao: :ciao:
nuoto in attesa del bacio di una principessa che mi trasformi in un gambero azzurro

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.721
  • Ne mors quidem nos iunget
    • Mostra profilo
Re:drag and drop su array di oggetti
« Risposta #14 il: 11 Maggio 2018, 23:40:05 »
...la febbre porta consiglio !    ;D
« Chiunque, non ricorrendo lo stato di necessità, nel proprio progetto Gambas fa uso delle istruzioni Shell o Exec, è punito con la sanzione pecuniaria da euro 20,00 a euro 60,00. »