Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 19
  1. #1

    [vb] Oggetto dentro Sub

    Ciao a tutti. Sono abbastanza convinto che non ho ancora capito bene il funzionamento della programmazione ad oggetti.
    Allora io ho un form, ok? Dentro il form ho 3 label ed 3 bottoni:
    lbl1
    lbl2
    lbl3
    cmdOk1
    cmdOk2
    cmdOk3

    Creo una Sub così
    codice:
    Sub Compila(codice As Integer)
       Dim lbl As Label, cmd As CommandButton
       lbl.Name = "lbl" & Codice
       cmd.Name = "cmdOk" & Codice
       lbl.Caption = Codice
       cmdOk.Visible = True
    End Sub
    Mi risulta un errore del tipo "Variabile oggetto o variabile del blocco With non impostata"...
    Come dovrei fare? L'alternativa è passare tra i parametri della Sub anche l'etichetta ed il comando tipo
    codice:
    Sub Compila(Codice As Integer, lbl As Label, cmd As CommandButton)
    ma nel caso io avessi 5 label e 3 bottoni per ogni blocco diventerei scemo a passare tutti quei valori per ogni blocco, no?
    Grazie a chiunque mi illumini...
    Ciao
    Enrico Frison
    El signore ghe da e suche a chi che no ga i porsei!

  2. #2
    Utente di HTML.it
    Registrato dal
    Feb 2002
    Messaggi
    22
    In che punto dell'applicazione ti da errore? Ricordati infatti che le variabili "lbl" e "cmd" hanno visibilità e vita solo all'interno della sub "Compila". Se tenti di usarle all'esterno si verifica un errore.

  3. #3
    Originariamente inviato da valezero
    In che punto dell'applicazione ti da errore? Ricordati infatti che le variabili "lbl" e "cmd" hanno visibilità e vita solo all'interno della sub "Compila". Se tenti di usarle all'esterno si verifica un errore.
    Anche se è Public Sub Compila (ecc...
    ?
    Enrico Frison
    El signore ghe da e suche a chi che no ga i porsei!

  4. #4
    Utente di HTML.it
    Registrato dal
    Feb 2002
    Messaggi
    22
    Si. Le variabili di una routine hanno visibilità solo all'interno del modulo stesso. Inoltre, la proprietà NAME è di sola lettura, quindi non puoi cambiarla in esecuzione. Non sò cosa vuoi ottenere con il codice che hai indicato, ma non credo che riuscirai a risolvere in questo modo.
    Saluti

  5. #5
    Originariamente inviato da valezero
    Si. Le variabili di una routine hanno visibilità solo all'interno del modulo stesso. Inoltre, la proprietà NAME è di sola lettura, quindi non puoi cambiarla in esecuzione. Non sò cosa vuoi ottenere con il codice che hai indicato, ma non credo che riuscirai a risolvere in questo modo.
    Saluti
    Dato che ho fatto in modo di avere una griglia, in cui in ogni casella ci sono 2 label, un bottone ed rettangolo. I nomi sono:
    lblCodice & coordinata
    lblID & coordinata
    cmd & coordinata
    rec & coordinata

    Ad esempio nella coordinata B3, c'è lblCodiceB3, lblIDB3, cmdB3 e recB3. Sfruttando questa nomenclature, volevo fare una sub che per ogni casella associasse le proprietà a tutti gli oggetti. Quindi se per ogni casella richiamavo la Sub Compila (coordinata As String)
    Tutto avrebbe dovuto essere compilato con i relaviti valori. CApito come? Se ho un db prendo i valori per ciascuna coordinata e li passo alle label, al rettangolo ed al pulsante.

    Cosi
    codice:
    Sub Compila (Coordinata As string)
       Dim lblCodice As Label, lblID As Label, cmd As CommandButton, _
       rec As Rectangle
       lblCodice.Name = "lblCodice" & coordinata
       lblID.Name = "lblID" & coordinata
       cmd.Name = "cmd" & coordinata
       rec.Name = "rec" & coordinata
    
       lblCodice.caption = "quello che vado a pescare dal db"
       lblID.Caption = "quello che vado a pescare dal db"
       cmd.visible = True
       rec.Height = "dato preso dal db"
    End Sub
    Ma a quanto pare sbaglio qualcosa di fondo...
    Enrico Frison
    El signore ghe da e suche a chi che no ga i porsei!

  6. #6

    In pratica

    Se ho una label di nome lbl1 come faccio con una sub con argomento "1" cambiare il valore della caption di quella label?
    codice:
    Sub Cambia (int As Integer)
       lbl & int.caption = "pippo"
    End Sub
    
    Call Cambia(1)
    So che la sintassi è sbagliata, ma è quello che vorrei fare...
    Grazie
    Enrico Frison
    El signore ghe da e suche a chi che no ga i porsei!

  7. #7
    Utente di HTML.it
    Registrato dal
    Feb 2002
    Messaggi
    22
    Guarda, che io sappia, la proprietà NAME degli oggetti è di sola lettura, quindi non può essere modificata in fase di esecuzione. Non puoi quindi fare lblCodice.name=...
    Per poter realizzare quello che hai detto io penserei di usare un array bidimensionale di controlli, dove gli indici della matrice vengono utilizzati per identificare in modo univoco gli oggetti cui si riferiscono le coordinate passate. Non sò se sia la soluzione migliore, ma è quella che mi è venuta istintivamente.
    Spero, in qualche modo, di esserti stato di aiuto.
    Saluti

  8. #8
    Utente di HTML.it
    Registrato dal
    Feb 2002
    Messaggi
    22
    Per risolvere quello che hai detto nel messaggio precedente puoi realizzare un array di controlli. In fase di progettazione crea una matrice di label. In esecuzione la tua sub "cambia" sarà così:
    sub Cambia(index as integer)
    mialabel(index).caption="miacaption"
    end sub

    la chiamata sarà per esempio:
    cambia(1)

  9. #9
    Originariamente inviato da valezero
    Per risolvere quello che hai detto nel messaggio precedente puoi realizzare un array di controlli. In fase di progettazione crea una matrice di label. In esecuzione la tua sub "cambia" sarà così:
    sub Cambia(index as integer)
    mialabel(index).caption="miacaption"
    end sub

    la chiamata sarà per esempio:
    cambia(1)
    Scusa l'ignoranza ma come si crea un'array di label?
    Enrico Frison
    El signore ghe da e suche a chi che no ga i porsei!

  10. #10
    Originariamente inviato da valezero
    Per risolvere quello che hai detto nel messaggio precedente puoi realizzare un array di controlli. In fase di progettazione crea una matrice di label. In esecuzione la tua sub "cambia" sarà così:
    sub Cambia(index as integer)
    mialabel(index).caption="miacaption"
    end sub

    la chiamata sarà per esempio:
    cambia(1)
    codice:
        Dim lblProva(1) As Label
        'Prova di array di label
        For i = 0 To 1
            lblProva(i).Caption = i
        Next
    Ma come si devono chiamare le due label? Ho fatto una prova con 2 label, si chiamano lblProva(1) e lblProva(2), giusto?
    Ho visto che non si possono creare 2 label con lo stesso nome...
    Enrico Frison
    El signore ghe da e suche a chi che no ga i porsei!

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.