Newsgroup: it.comp.lang.visual-basic
Titolo: Variabili con numeri - 2

Con VB6.0, se un oggetto si chiama "Bottone1", non esiste il modo di
richiamarlo usando una variabile di tipo integer x=1, Bottone(x).proprietą =
xxxyyyzzz ?
(lo so, l'ho gią chiesto prima, ma il problema č che vorrei evitare di usare
un array)


NO, non è possibile. DEVI usare un array di controlli.
Ma ti era già stato risposto.
--
 
federic...@planet.it
Eliminare NOSPAM dall'indirizzo! Delete NOSPAM from address!


RTFM (or press f1 key for help)
Ma scusa, pensi che se fosse stato possibile o di facile soluzione qualcuno
non te l'avrebbe già detto nel post di qualche giorno fa?
Insomma, passi fare domande al limite dell'idiozia, ma perseverare....
Se non ti piace questo tipo di programmazione, trovatene uno che ti faccia
fare questo giochetto inutile (visto che comunque con un array risolvi tutto
senza un briciolo di problemi) oppure scriviti un compilatore con le regole
che piu' ti piacciono...
Scusate lo sfogo, ma non e' possibile ripostare la stessa domanda a distanza
di pochi giorni, quando gia' dal 16 aprile ben tre persone (tra cui io), ti
hanno risposto che non si puo' fare, in quanti te lo devono dire? in
cinquanta?
Leggiti, per tua curiosita' personale, il manifesto del NG, e scopri che
cosa hai sbagliato... (e cosa sto sbagliando io rispondendoti in questo
modo...)
E poi perche' non vorresti usare un array? Hai subito un trauma durante
l'utilizzo di un vettore? Certi problemi vanno superati ed affrontati, non
puoi passare la vita a nasconderti...
Ciao...


mi sembra che in Access, una cosa del genere si possa fare,
vacci a dare un'occhiata e poi prova in vb, ma sicuramente no.
ciao
davide U

un array)
Non capisco...
Ma Bottone(x) non è proprio un elemento di un array?
Stai dicendo qualcosa tipo "Vorrei contare le pecore ma senza usare numeri,
come faccio?".
Puoi provare come facevano una volta: con i sassi, ma forse i numeri
sarebbero più comodi...
Ciao.


Visto che non si può fare a meno di usare un array, allora vorrei chiarire
una cosa: se non sbaglio,  per fare un array bisogna seguire la seguente
procedura:
dim controlli(10) as [tipo oggetto]
set controlli(1) = CommandButton1
set controlli(2) = CommandButton2
...
ora, se i controlli sono pochi non c'è problema, tuttavia se il numero
diventa eccessivo allora la procedura risulta particolarmente scomoda: per
cui, avrei voluto dimensionare un array servendomi di un ciclo for:
for x = 1 to 25
controlli(x) = CommandButton(x)
next x
tuttavia, questo non si può fare (finalmente l'ho capita...).
Alla fine della fiera, esiste quindi un modo più veloce per dimensionare un
array di 30 e passa comandi senza settarli uno per volta?
grazie anticipatamente


In fase di design, inserendo i controlli sul Form, se gli dai lo stesso
nome, crei di conseguenza un array, senza bisogno
di eseguire dim controlli(10) as ....
Se ti crei 30 controlli di tipo CommandButton, tutti con il nome cmdCommand,
avrai un array di CommandButton, chiamati:
cmdCommand(0).... fino a cmdCommand(29). Tutto senza fare strani giochi di
prestigio.
A questo punto, con un indice, puoi accedere a qualsiasi elemento:
for x = 0 to 29
    cmdCommand(x).Enabled = False
next x.
A proposito, tutti questi controlli sono personalizzabili uno per uno,
l'unica proprietà per distinguerli e per accedere ai singoli elementi è la
proprietà Index (x = cmdCommand.Index oppure cmdCommand(x).Caption =
"Command " & cmdCommand(x).Index)
Chiaro?
Se invece il tuo problema è di creare i controlli a runtime, le cose
cambiano, ma il concetto di array di controlli ottenuto, attraverso lo
stesso nome dei controlli rimane.



Correzione:
(x = cmdCommand(0).Index oppure cmdCommand(x).Caption = "Command " &
cmdCommand(x).Index)
Scusa, mi è scappata


 un array di 30 e passa comandi senza settarli uno per volta?
In casi come questo io di solito metto sul form un solo controllo (con
indice 0) poi a runtime genero (Load) e metto in posizione quelli che mi
servono. Per esempio:
Private Sub Form_Load( _
)
Const MYROWS As Integer = 3
Const MYCOLS As Integer = 2
Const HTEXTOFFSET As Integer = 96
Const VTEXTOFFSET As Integer = 120
Dim s_Caption(0 To MYROWS * MYCOLS - 1)
Dim i_Col   As Integer
Dim i_Index As Integer
Dim i_Row   As Integer
  Let s_Caption(0) = "Btn1"
  Let s_Caption(1) = "Btn2"
  Let s_Caption(2) = "Btn3"
  Let s_Caption(3) = "Btn4"
  Let s_Caption(4) = "Btn5"
  Let s_Caption(5) = "Btn6"
  For i_Row = 0 To MYROWS - 1
    For i_Col = 0 To MYCOLS - 1
      Let i_Index = i_Row * MYCOLS + i_Col
      If i_Index Then _
        Load Command1(i_Index)
      With Command1(i_Index)
        Let .Caption = s_Caption(i_Index)
        Call .Move( _
            .Left + (.Width + HTEXTOFFSET \ 2) * i_Col _
          , .Top + (.Height + VTEXTOFFSET \ 2) * i_Row)
        Let .Visible = True
      End With
    Next
  Next
End Sub
--
Ciao.
Maurizio