Newsgroup: it.comp.appl.access
Titolo: Utilizzare una variabile per determinare il nome di un controllo

Ciao a tutti!!!!!
Mi sono messo a fare un'applicazioncina per fare allenare mia figlia con le
operazioni matematiche e mi sono incasinato.
Ho costruito una maschera con 20 controlli per ognuno dei seguenti tipi:
Operando, Operatore, Risultato, CaselladiVerifica
Per evitare di ripetere le istruzioni per ogni gruppo di controlli ho
chiamato gli Operandi "s1","s2",ecc. gli Operatori "d1","d2",ecc., i
risultati "r..." e le caselle di verifica "v..."
Compilo "s..." e "d..." con la funzione RND in un ciclo for each
control...next che ha all'interno un for intNum=1 to 20...next .
Tutto bene per Moltiplicazioni ed Addizioni (almeno in questa prima fase).
Per le divisioni si crea un problema: dovendo inserire solo divisioni a
resto 0 compilo prima il quoziente e il divisore, poi dovrei dire a VB che
il dividendo č quoziente*divisore con una routine di questo tipo
for each ctl in me.controls
    for intNum=1 to 20
        if 
ctl.name
= "s" & intNum then
        ctl = (me!d & intNum) * (me!r & intNum)
        end if
    next intNum
next
Ovviamente in esecuzione VB mi dice che non trova il controllo Me!d e Me!r
Lo stesso problema succede con le sottrazioni dove il 2°membro deve essere
minore del 1° e quando eseguo il controllo dei risultati in cui il controllo
"v..." deve essere il risultato dell'operazione tra "s..." e "d...",
La domanda č: c'č un modo per utilizzare il valore di un controllo il cui
nome non č digitato completamente ma č composto da una parte digitata e
l'altra assegnata da una variabile?
Ho ovviamente cercato sulla guida in linea, ma.....Nulla!!!!!
Grazie a tutti,
Ciao Paolo

 ha scritto nel messaggio
news:and74d$sh5$1...@lacerta.tiscalinet.it...

Ci sei quasi arrivato.
ctl = (me("d") & intNum) * (me("r") & intNum)
Ciao Giorgio

 >
Scusa ho fatto casino con le parentesi.
ctl = me("d" & intNum) * me("r" & intNum)
Ciao Giorgio

 Ho ovviamente cercato sulla guida in linea, ma.....Nulla!!!!!
    Ovviamente... ;-)
    Io riscriverei cosi' il tuo codice:
Option Compare Database
Option Explicit
Private Const mc_lLBound = 1
Private Const mc_lUBound = 20
Private Const mc_sOdo = "s"
Private Const mc_sOri = "d"
Private Const mc_sRis = "r"
Private Const mc_sVer = "v"
Private Sub TuaSub()
  Dim ctl  As Object
  Dim iNum As Long
  For Each ctl In Me.Controls
    If (ctl Is Access.TextBox) Then
      For iNum = mc_lLBound To mc_lUBound
        If (ctl.Name = mc_sOdo & iNum) Then
          With Me.Controls
            ctl.Value _
              = .Item(mc_sOri & iNum).Value _
              * .Item(mc_sRis & iNum).Value
          End With
        End If
      Next
    End If
  Next
End Sub
... ma lo scopo di tutto questo non mi e' chiaro.
--
Ciao :-)
Maurizio
--------
?SPQR(C)
 X
--------

   Dim iNum As Long
    Voleva essere:
    Dim lNum As Long
e lNum al posto di iNum nel resto del codice.


 ha
scritto:

Grazie, grazie, grazie
Stasera a casa provo e ti faccio sapere
--------------------------------
Inviato via 
http://usenet.libero.it


Perfetto. Grazie ancora

 > nome non è digitato completamente ma è composto da una parte digitata e

Grazie!!!
Mi sorgono spontanee due richieste di approfondimento (per curiosità e
cultura mia):
1°Perchè usi le costanti e non più semplicemente le variabili?
2° Dici che non capisci lo scopo. Quello che voglio fare è semplicemente
compilare operandi ed operatori di venti operazioni , far calcolare i
risultati a mia figlia e verificare tempi e correttezza tramite VB (è ciò
che fanno a scuola su carta). Mi è sembrato che creare gruppi di controlli
identificati dal numero (es: s1*d1 = r1 (v1) rispettivamente per Operando,
Operatore, Risultato, Verifica) fosse una buona soluzione, ma se hai
un'altra idea ed hai tempo e voglia di raccontarmela ti ringrazio
anticipatamente
Ciao Paolo