Oppure

Loading
16/06/13 18:39
emanuele19956
Salve a tutti,
sto realizzando la battaglia navale in Visual Basic .NET

Mi sto occupando ora del form in cui l'utente dispone le sue navi. La griglia è composta da ben 150 button (15*10), ma in .NET non è possibile crearli sotto forma di matrice di controllo come in VB6, perciò sto trovando molto difficoltoso e lungo il fatto di copiare tante volte lo stesso codice per tutti i button.
Leggendo in giro ho visto che esistono dei modi alternativi (ovviamente) ma purtroppo non riesco a comprenderli molto bene, in quanto non sono ancora entrato nella programmazione ad oggetti (argomento del prossimo anno :( ). Gli unici concetti che conosco sono quelli di classe, attributo, metodo, ereditarietà e overloading.

Qualcuno può spiegarmi come risolvere? Quello che voglio fare è questo: l'utente può posizionare UNA barca da due caselle, DUE barche da tre caselle, UNA barca da quattro caselle e UNA da cinque.
Quindi ho intenzione di mettere 5 options, una a barca. In base alla option scelta dall'utente, voglio che il button cliccato si colori di rosso e che si colorino di rosa tutti i button adiacenti, in modo tale da dare all'utente una panoramica delle posizioni che la barca può assumere.
Questo era per spiegare ciò che voglio fare, ma non datemi suggerimenti riguarda come colorarli nel modo giusto (ci sto pensando da solo e voglio finirlo da solo :D:D:D), vorrei solamente sapere come facilitarmi il compito coi 150 button, che nel form successivo saranno 300 D: (150 in cui l'utente vede le sue navi e 150 in cui sceglie quale posizione avversaria colpire).

Spero di essere stato chiaro, chiedete per qualsiasi dubbio.

Grazie a tutti in anticipo :3
aaa
16/06/13 19:47
carmine
Ciao!
Credo ti basti dichiararli e poi associarli ai controlli:
Dim matrice As Button(,) = New Button(N, M)
For i = 0 to N
   For j = 0 to M
        matrice(i, j) = Me.Controls("Button" + i.ToString());
   Next j
Next i
aaa
16/06/13 20:26
emanuele19956
Mi dice che la funzione ha troppi argomenti... Come se al massimo potessi creare un array monodimensionale.

--------------edit--------------

ora che ci faccio caso non va neanche se metto un argomento solo... parlo della riga 1 di codice postata da carmine.
Ultima modifica effettuata da emanuele19956 16/06/13 20:30
aaa
16/06/13 20:39
carmine
mmm ora che ci penso, VB.net non può istanziare array di controlli...prova a risolvere con un datagridview con colonne tipo ButtonColumn!
aaa
16/06/13 20:47
emanuele19956
Puoi spiegarmi meglio il funzionamento di questo arcano strumento?
aaa
16/06/13 22:10
Ultimo

 Private Sub BtnGruppo_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Btn90.Click, Btn9.Click, Btn89.Click, Btn88.Click, Btn87.Click, Btn86.Click, Btn85.Click, Btn84.Click, Btn83.Click, Btn82.Click, Btn81.Click, Btn80.Click, Btn8.Click, Btn79.Click, Btn78.Click, Btn77.Click, Btn76.Click, Btn75.Click, Btn74.Click, Btn73.Click, Btn72.Click, Btn71.Click, Btn70.Click, Btn7.Click, Btn69.Click, Btn68.Click, Btn67.Click, Btn66.Click, Btn65.Click, Btn64.Click, Btn63.Click, Btn62.Click, Btn61.Click, Btn60.Click, Btn6.Click, Btn59.Click, Btn58.Click, Btn57.Click, Btn56.Click, Btn55.Click, Btn54.Click, Btn53.Click, Btn52.Click, Btn51.Click, Btn50.Click, Btn5.Click, Btn49.Click, Btn48.Click, Btn47.Click, Btn46.Click, Btn45.Click, Btn44.Click, Btn43.Click, Btn42.Click, Btn41.Click, Btn40.Click, Btn4.Click, Btn39.Click, Btn38.Click, Btn37.Click, Btn36.Click, Btn35.Click, Btn34.Click, Btn33.Click, Btn32.Click, Btn31.Click, Btn30.Click, Btn3.Click, Btn29.Click, Btn28.Click, Btn27.Click, Btn26.Click, Btn25.Click, Btn24.Click, Btn23.Click, Btn22.Click, Btn21.Click, Btn20.Click, Btn2.Click, Btn19.Click, Btn18.Click, Btn17.Click, Btn16.Click, Btn15.Click, Btn14.Click, Btn13.Click, Btn12.Click, Btn11.Click, Btn10.Click, Btn1.Click

        ' Questo metodo consente di gestire tutti i Button quando vi si clicca sopra.
        ' Ogni Button cliccato verrà identificato dal metodo sender.
        Dim clickedButton As Button = TryCast(sender, Button)
        'variabile che memorizza l'indexTab
        dim  Num as int32 = clickedButton.TabIndex + 1
        clickedButton.BackColor = Color.Red

      
    End Sub

  

  



Seleziona tutti i button, poi seleziona dagli eventi l'evento click, verrà creato un unico evento click per
tutti i button come sopra.
If ok Then GOTO Avanza else GOTO Inizia

17/06/13 20:10
emanuele19956
Ok, il codice funziona, anche se ovviamente non l'ho capito.
(sono solo io quello che preferisce usare l'assembly per l'estrema e profonda comprensione di quello che si fa?)
Ultima modifica effettuata da emanuele19956 17/06/13 20:10
aaa
18/06/13 16:48
emanuele19956
Ho cambiato strategia ... Ho scritto del codice per creare i 150 button in fase di esecuzione, poichè gestire posizione e dimensione manualmente era un inferno.
 Dim k, j As Byte
        Dim posx, posy As Short
        posx = 0
        posy = 0
        For j = 1 To 10
            For k = 1 To 15
                Dim Btn As New Button()
                Btn.Location = New Point(12 + posx, 150 + posy)
                Btn.Size = New Point(25, 25)
                Btn.Visible = False
                Btn.Name = "Casella"
                Me.Controls.Add(Btn)
                posx = posx + 25
            Next k
            posx = 0
            posy = posy + 25
        Next j


Ora come potrei fare per il discorso dei click? Non posso scrivere il codice suggeritomi da ultimo perché quei button non esistono, se non in fase di esecuzione, per cui mi trovo in seria difficoltà. Cosa faccio?
A me serve di riconoscere il button che è stato premuto e poi di far accadere la medesima azione ad alcuni dei button circostanti, in base però a quuale button ho cliccato. Chiedete se non mi sono spiegato bene
aaa