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
Visual Basic 6 - Creare e spostare controlli a runtime
Forum - Visual Basic 6 - Creare e spostare controlli a runtime

Avatar
gabryk (Normal User)
Rookie


Messaggi: 24
Iscritto: 04/10/2006

Segnala al moderatore
Postato alle 12:14
Giovedì, 17/04/2008
Ciao a tutti il mio problema è questo: devo creare un calendario di calcio che abbia x giornate e y partite (in ogni giornata). Per ogni giornata devo avere il titolo in una label (del tipo "Giornata 1") e tante righe quanto è y (in ogni riga devono esserci 3 textbox per il risultato di andata e di ritorno e per contenere le due squadre sfidanti.
Tipo

Giornata 1
0-1 | Topolino - Minni | 0-0
6-2 | Pippo - Pluto | 2-1
2-1 | Paperoga - Paperone | 3-3
1-1 | Qui - Quo | 0-0

Il problema è che da quante giornate dev'essere il calendario e da quante partite devono essere formate le giornate devono essere parametri liberi.
Ora stavo provando a creare a runtime il titolo e a spostarlo nel form a seconda dello spazio disponibile (se uso left e top senza accorgimenti dopo la giornata 7 le altre vanno fuori dalla zona visibile del form) e ci sono riuscito.
Il problema maggiore ora è creare a runtime una riga per ogni partita e posizionarla correttamente. Dovrei usare dei Do annidati credo ma quando provo mi da errore "oggetto già caricato" e non riesco a capire perchè.

Provavo qualcosa del genere:
Codice sorgente - presumibilmente VB.NET

  1. i = 1
  2. Do Until i >= giornate
  3.     r = 1
  4.     If i > 1 Then
  5.         Load lblGiornata(i)
  6.         lblGiornata(i).Caption = "Giornata " & i
  7.         lblGiornata(i).Top = txtSquadre(i).Top + 285 + 65
  8.         lblGiornata(i).Visible = True
  9.     End If
  10.  
  11.     Do Until r >= partite
  12.         Load lblRisultatoA(r)
  13.         Load txtSquadre(r)
  14.         Load lblRisultatoR(r)
  15.         lblRisultatoA(r).Top = lblRisultatoA(r - 1).Top + 285
  16.         lblRisultatoR(r).Top = lblRisultatoR(r - 1).Top + 285
  17.         txtSquadre(r).Top = txtSquadre(r - 1).Top + 285
  18.         lblRisultatoA(r).Visible = True
  19.         lblRisultatoR(r).Visible = True
  20.         txtSquadre(r).Visible = True
  21.     r = r + 1
  22.     Loop
  23. i = i + 1
  24. Loop


PM Quote
Avatar
P4p3r0g4 (Member)
Guru


Messaggi: 1319
Iscritto: 29/12/2006

Segnala al moderatore
Postato alle 14:15
Giovedì, 17/04/2008
ehi gioco anch'io!!

comunque cava i do e metti i for.

ah e per gli index.
i controlli da cui prendono elementi i load che index hanno?

Ultima modifica effettuata da P4p3r0g4 il 17/04/2008 alle 14:17
PM Quote
Avatar
gabryk (Normal User)
Rookie


Messaggi: 24
Iscritto: 04/10/2006

Segnala al moderatore
Postato alle 17:23
Giovedì, 17/04/2008
Gli elementi da riprodurre a runtime hanno index 0 ovviamente, per questo la i parte da 1... o è lì che sbaglio?

Cmq  questo è il codice con i for, ma questo non inizia nemmeno il ciclo perchè ho messo una msgbox che dovrebbe dirmi il valore di i ad ogni ripetizione, invece non fa niente...

Codice sorgente - presumibilmente VB.NET

  1. For i = 2 To i >= giornate Step 1
  2.     If i > 1 Then
  3.         Load lblGiornata(i)
  4.         lblGiornata(i).Caption = "Giornata " & i
  5.         lblGiornata(i).Top = txtSquadre(i).Top + 285 + 65
  6.         lblGiornata(i).Visible = True
  7.     End If
  8.     For r = 2 To r >= partite Step 1
  9.         Load lblRisultatoA(r)
  10.         Load txtSquadre(r)
  11.         Load lblRisultatoR(r)
  12.         lblRisultatoA(r).Top = lblRisultatoA(r - 1).Top + 285
  13.         lblRisultatoR(r).Top = lblRisultatoR(r - 1).Top + 285
  14.         txtSquadre(r).Top = txtSquadre(r - 1).Top + 285
  15.         lblRisultatoA(r).Visible = True
  16.         lblRisultatoR(r).Visible = True
  17.         txtSquadre(r).Visible = True
  18.     Next r
  19. Next i


Ultima modifica effettuata da gabryk il 17/04/2008 alle 17:41
PM Quote
Avatar
P4p3r0g4 (Member)
Guru


Messaggi: 1319
Iscritto: 29/12/2006

Segnala al moderatore
Postato alle 19:20
Giovedì, 17/04/2008
hai cannato in pieno l'uso del for
Codice sorgente - presumibilmente VB.NET

  1. For i = 1 To giornate
  2.     If i > 1 Then
  3.         Load lblGiornata(i)
  4.         lblGiornata(i).Caption = "Giornata " & i
  5.         lblGiornata(i).Top = txtSquadre(i).Top + 285 + 65
  6.         lblGiornata(i).Visible = True
  7.     End If
  8.     For r = 1 To partite
  9.         Load lblRisultatoA(r)
  10.         Load txtSquadre(r)
  11.         Load lblRisultatoR(r)
  12.         lblRisultatoA(r).Top = lblRisultatoA(r - 1).Top + 285
  13.         lblRisultatoR(r).Top = lblRisultatoR(r - 1).Top + 285
  14.         txtSquadre(r).Top = txtSquadre(r - 1).Top + 285
  15.         lblRisultatoA(r).Visible = True
  16.         lblRisultatoR(r).Visible = True
  17.         txtSquadre(r).Visible = True
  18.     Next r
  19. Next i



questo dovrebbe funzionare.

PM Quote