Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
C# / VB.NET - Matrice di controlli
Forum - C# / VB.NET - Matrice di controlli

Avatar
emanuele19956 (Normal User)
Newbie


Messaggi: 19
Iscritto: 19/05/2013

Segnala al moderatore
Postato alle 20:39
Domenica, 16/06/2013
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

PM Quote
Avatar
carmine (Member)
Pro


Messaggi: 168
Iscritto: 20/04/2010

Segnala al moderatore
Postato alle 21:47
Domenica, 16/06/2013
Ciao!
Credo ti basti dichiararli e poi associarli ai controlli:
Codice sorgente - presumibilmente VB.NET

  1. Dim matrice As Button(,) = New Button(N, M)
  2. For i = 0 to N
  3.    For j = 0 to M
  4.         matrice(i, j) = Me.Controls("Button" + i.ToString());
  5.    Next j
  6. Next i


PM Quote
Avatar
emanuele19956 (Normal User)
Newbie


Messaggi: 19
Iscritto: 19/05/2013

Segnala al moderatore
Postato alle 22:26
Domenica, 16/06/2013
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 il 16/06/2013 alle 22:30
PM Quote
Avatar
carmine (Member)
Pro


Messaggi: 168
Iscritto: 20/04/2010

Segnala al moderatore
Postato alle 22:39
Domenica, 16/06/2013
mmm ora che ci penso, VB.net non può istanziare array di controlli...prova a risolvere con un datagridview con colonne tipo ButtonColumn!

PM Quote
Avatar
emanuele19956 (Normal User)
Newbie


Messaggi: 19
Iscritto: 19/05/2013

Segnala al moderatore
Postato alle 22:47
Domenica, 16/06/2013
Puoi spiegarmi meglio il funzionamento di questo arcano strumento?

PM Quote
Avatar
Ultimo (Member)
Guru


Messaggi: 877
Iscritto: 22/05/2010

Segnala al moderatore
Postato alle 0:10
Lunedì, 17/06/2013

  
Codice sorgente - presumibilmente VB.NET

  1. 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
  2.  
  3.         ' Questo metodo consente di gestire tutti i Button quando vi si clicca sopra.
  4.         ' Ogni Button cliccato verrà identificato dal metodo sender.
  5.         Dim clickedButton As Button = TryCast(sender, Button)
  6.         'variabile che memorizza l'indexTab
  7.         dim  Num as int32 = clickedButton.TabIndex + 1
  8.         clickedButton.BackColor = Color.Red
  9.  
  10.      
  11.     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

PM Quote
Avatar
emanuele19956 (Normal User)
Newbie


Messaggi: 19
Iscritto: 19/05/2013

Segnala al moderatore
Postato alle 22:10
Lunedì, 17/06/2013
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 il 17/06/2013 alle 22:10
PM Quote
Avatar
emanuele19956 (Normal User)
Newbie


Messaggi: 19
Iscritto: 19/05/2013

Segnala al moderatore
Postato alle 18:48
Martedì, 18/06/2013
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.
Codice sorgente - presumibilmente VB.NET

  1. Dim k, j As Byte
  2.         Dim posx, posy As Short
  3.         posx = 0
  4.         posy = 0
  5.         For j = 1 To 10
  6.             For k = 1 To 15
  7.                 Dim Btn As New Button()
  8.                 Btn.Location = New Point(12 + posx, 150 + posy)
  9.                 Btn.Size = New Point(25, 25)
  10.                 Btn.Visible = False
  11.                 Btn.Name = "Casella"
  12.                 Me.Controls.Add(Btn)
  13.                 posx = posx + 25
  14.             Next k
  15.             posx = 0
  16.             posy = posy + 25
  17.         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

PM Quote