Buongiorno, il mio "programma" è molto elementare e sopratutto poco ordinato.
Ogni istruzione mi costa parecchio lavoro e tante prove perchè non sempre so
come piazzarla e quindi non ho capito bene a cosa ti riferisci con
"come ti sei organizzato per identificare le 40 picturebox".
Quindi confidando nella tua pazienza allego il codice in cui trovi tanti omissis per
le istruzioni ripetitive e che forse potrei raggruppare in matrici ma ancora non mi riesce.
Codice...
Public Class Form1
' qualche Dim anche de dichiarata non è utilizzata
Private currentX As Integer, currentY As Integer
Private isDragging1 As Boolean = False
' ... omissis da isDragging2 a isDragging39
Private isDragging40 As Boolean = False
Dim MioNumero(41) As Integer
' queste 2 istruz. (di Carlo) non so ancora come utilizzarle
' Dim indice As Integer = 1
' Dim nome As String = System.IO.Path.GetFileName(ImageList1.Images.Keys(indice))
Dim NumeroCarta(41) As Integer
Dim Contatore As Integer
Dim PercorsoImmagini As String
Dim superficie As Graphics
Dim NuovaCarta As Integer
Dim CartaInAttesa As Integer
Dim Sorteggio As New Random
Dim n As Integer
Dim Dieci As Integer
Dim punteggio As Integer
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles Me.Load
' questo ciclo For Each... Next passa in rassegna i controlli PictureBox presenti nel Form1
' e visualizza in ognuno di essi l'immagine che nella ImageList ha il n. 0
' ossia il retro di una carta:
My.Computer.Audio.Play(My.Resources.Sottofondo_1, AudioPlayMode.BackgroundLoop)
For Each Control In Me.Controls
If TypeOf Control Is PictureBox Then Control.Image = ImageList1.Images(0) ' dorso carta
Next
For Contatore = 1 To 40
NumeroCarta(Contatore) = Contatore
Next
lblPunteggio.Text = punteggio
End Sub
Private Sub MostraLeCarte()
Contatore = 1
For Each Control In Me.Controls
If TypeOf Control Is PictureBox Then
Control.Image = ImageList1.Images(NumeroCarta(Contatore))
Control.refresh()
Contatore += 1
End If
Next
End Sub
Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click ' Avvio
Dim Contatore As Integer
Dim NuovaCarta As Integer
Dim CartaInAttesa As Integer
Dim Sorteggio As New Random
Randomize() 'istuz. seguenti prese da manuale VB2010EXpress online
For Contatore = 1 To 40
'Esamina una carta per volta, partendo dalla carta con il n. 1, sino alla carta con il n. 40:
' sorteggia il numero di una nuova carta, da 1 a 40:
NuovaCarta = Sorteggio.Next(1, 40)
' memorizza nella CartaInAttesa il numero della nuova carta sorteggiata:
CartaInAttesa = NumeroCarta(NuovaCarta)
' mette al posto della nuova carta sorteggiata la carta in esame
NumeroCarta(NuovaCarta) = NumeroCarta(Contatore)
' infine, mette nella carta in esame la CartaInAttesa:
NumeroCarta(Contatore) = CartaInAttesa
Next
' dopo avere creato una nuova sequenza di carte, in modo casuale,
' passa alla procedura che visualizza le carte:
Call MostraLeCarte() ' solo per vedere rapidam. se cambiate
Button2.Visible = False
Call CopriLeCarte() ' copro con altre Label con dorso carte
'
End Sub
Private Sub Label1_Click(sender As Object, e As EventArgs) Handles Label1.Click
Label1.Visible = False
End Sub
' ... omissis da Sub Label2_Click a Sub Label39_Click ' forse potrei raggrupparle in matrice
Private Sub Label40_Click(sender As Object, e As EventArgs) Handles Label40.Click
Label40.Visible = False
End Sub
Private Sub CopriLeCarte()
Label1.Width = Label1.Width + 45 : Label1.Height = Label1.Height + 88
... omissis da Label2.Width ....a Label39.Width... ' forse potrei raggrupparle in matrice
Label40.Width = Label40.Width + 45 : Label40.Height = Label40.Height + 88
End Sub
'**** forse Carlo si riferisce a questo gruppo di sub
' per la 1^ PictureBox
Public Sub PictureBox1_MouseDown(sender As Object, e As System.Windows.Forms.MouseEventArgs) Handles PictureBox1.MouseDown
isDragging1 = True
End Sub
Private Sub PictureBox1_MouseMove(sender As Object, e As MouseEventArgs) Handles PictureBox1.MouseMove
If isDragging1 Then
PictureBox1.Top = PictureBox1.Top + (e.Y - currentY)
PictureBox1.Left = PictureBox1.Left + (e.X - currentX)
End If
End Sub
Private Sub PictureBox1_MouseUp(sender As Object, e As MouseEventArgs) Handles PictureBox1.MouseUp
' MsgBox("nome immagine è: " & PictureBox1.Image.ToString) Then
isDragging1 = False
If PictureBox1.Left + (e.Y - currentY) >= 758 Then
Dieci = Dieci + 1
Call Messaggio()
End If
End Sub
' ... omissis per i gruppi da PictureBox2_... a PictureBox39_... ' anche queste forse potrei raggrupparle in matrice
' per la 40^ PictureBox
Private Sub PictureBox40_MouseDown(sender As Object, e As System.Windows.Forms.MouseEventArgs) Handles PictureBox40.MouseDown
isDragging40 = True
End Sub
Private Sub PictureBox40_MouseMove(sender As Object, e As MouseEventArgs) Handles PictureBox40.MouseMove
If isDragging40 Then
PictureBox40.Top = PictureBox40.Top + (e.Y - currentY)
PictureBox40.Left = PictureBox40.Left + (e.X - currentX)
End If
End Sub
Private Sub PictureBox40_MouseUp(sender As Object, e As MouseEventArgs) Handles PictureBox40.MouseUp
isDragging40 = False
n = n + 1
If PictureBox40.Left + (e.Y - currentY) >= 758 Then
Dieci = Dieci + 1
Call Messaggio()
End If
End Sub
'****
Private Sub Messaggio() ' questa è da sistemare
Select Case Dieci
Case 1
MsgBox("Hai posizionato il 1° dieci." & vbCrLf & " omissis "
Case 2
MsgBox("Hai posizionato il 2° dieci." & vbCrLf & " omissis"
Case 3
MsgBox("Hai posizionato il 3° dieci." & vbCrLf & " omissis"
Case 4
MsgBox("Hai posizionato il 4° dieci." & vbCrLf &
"Se hai altre carte coperte il solitario probabilmente non è riuscito" & vbCrLf & " omissis"
End Select
End Sub
Private Sub HelpToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles HelpToolStripMenuItem.Click
MsgBox(" Per iniziare clicca sul pulsante 'Avvia il solitario'." & vbCrLf &
'... omissis
End Sub
Private Sub InfoToolStripMenuItem_Click_1(sender As Object, e As EventArgs) Handles InfoToolStripMenuItem.Click
MsgBox("Autore - Marzo 2021"
End Sub
Private Sub btn_Conferma_Click(sender As Object, e As EventArgs) Handles btn_Conferma.Click
punteggio = punteggio + 1
lblPunteggio.Text = punteggio
Call ControllaPunteggio()
End Sub
Private Sub ControllaPunteggio() ' questa è da sistemare
If (n = 4 Or punteggio >= 36) Then
Select Case punteggio
Case 40...
Case 39...
Case 38...
Case 36...
End Select
End If
End Sub
End Class
Fine Codice
Saluti