Pagina 1 di 3 1 2 3 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 25
  1. #1
    Utente di HTML.it
    Registrato dal
    May 2002
    Messaggi
    156

    [VB6] Passaggio di oggetto form ad un metodo di controllo activex

    Ciao a tutti
    In un mio controllo activex ho dichiarato il seguente metodo:

    codice:
    Public Sub Blo_Sblo(ParamArray vForms() As Variant)
    Dim co As Control
    For Each co In vForms(0).Controls
      MsgBox co.Name
    Next
    End Sub
    e questa è la riga di comando per richiamare il metodo:

    codice:
    BS.Blo_Sblo (frmProva)
    Il problema:
    L'oggetto che passo al metodo è un array di form. Nel metodo del controllo però non viene visto come tale, ma come "object" generico.
    Non riesco quindi ad accedere alle relative proprietà, e il programma dà errore sul For Each.

    Ho provato a copiare il metodo incollandolo come routine nel programma, e funziona regolarmente.

    I form non possono quindi essere passati come tali agli activex???
    Mi sembra strano. Come faccio a bypassare il problema?

  2. #2
    Utente di HTML.it
    Registrato dal
    May 2002
    Messaggi
    156
    anche se non utilizzo gli array mi dà lo stesso errore:
    (proprietà o metodo non supportati dall'oggetto)
    sempre sul For Each - in pratica è sempre l'errore di prima
    cioè non vede vForm come oggetto Form ma come Object...

    codice nel controllo activex:
    codice:
    Public Sub Blo_Sblo(vForm As Variant)
    Dim co As Control
    For Each co In vForm.Controls
      MsgBox co.Name
    Next
    End Sub
    codice nel programma chiamante: (BS è l'oggetto activex)
    codice:
    Private Sub Form_Load()
    BS.Blo_Sblo (frmProva)
    End Sub

  3. #3
    Utente di HTML.it L'avatar di Brainjar
    Registrato dal
    Nov 2004
    Messaggi
    1,162
    L'errore dipende dal fatto che probabilmente dichiari un oggetto BS
    ma non lo crei.

    Crea un nuovo Progetto di tipo ActiveX DLL, lo chiami ProgettoProva.
    In questo progetto avrai una sola classe prova (prova.cls)
    In questa classe questo è il codice :

    codice:
    Option Explicit
    
    Public Sub Blo_Sblo(vForm As Object)
    Dim co As Control
    For Each co In vForm.Controls
      MsgBox co.Name
    Next
    End Sub
    Compila il progetto e crea la DLL.
    Nel tuo Progetto originale, nei riferimenti, spunta la DLL appena
    creata.

    Dichiara e crea l'oggetto BS

    codice:
    Option Explicit
    Public BS As New ProgettoProva.prova ' Dichiaro e Creo BS
    
    Private Sub Command1_Click()
        Call BS.Blo_Sblo(Me)
    End Sub
    Nel codice qui sopra il richiamo al metodo Blo_Sblo è in um
    command, per semplicità.


    Ciao,
    Ciao, Brainjar

  4. #4
    Utente di HTML.it
    Registrato dal
    May 2002
    Messaggi
    156
    grazie x l'interessamento

    ma è lo stesso anche se il mio è un controllo ocx, non una dll?

    Ho un gruppo di progetti con l'ocx e un progetto di prova

  5. #5
    Utente di HTML.it
    Registrato dal
    May 2002
    Messaggi
    156
    scusa non ho tanta dimestichezza con gli oggetti di questo tipo.
    Ho fatto come hai detto, anche se il mio è un oggetto ocx.
    Ho fatto anche la modifica di mettere in un modulo di classe il metodo "Blo_Sblo".

    Ho creato l'ocx e l'ho inserito tra i componenti nel progetto di prova.
    Quando poi devo dichiarare l'oggetto BS però non lo vede...
    e non mi vede più il metodo Blo_Sblo...

  6. #6
    Utente di HTML.it L'avatar di Brainjar
    Registrato dal
    Nov 2004
    Messaggi
    1,162
    Si è lo stesso.
    Ciao,
    Ciao, Brainjar

  7. #7
    Utente di HTML.it L'avatar di Brainjar
    Registrato dal
    Nov 2004
    Messaggi
    1,162
    Se è un'OCX, deve comparire nella toolbox.
    Ne metti uno nel Form e lo rendi .visible = false
    Se lo chiami BS, la chiamata al metodo sarà :

    Call BS.Blo_Sblo(Me)


    Ciao,
    Ciao, Brainjar

  8. #8
    Utente di HTML.it
    Registrato dal
    May 2002
    Messaggi
    156
    sono un po' duro non mi funzona ancora...
    riepilogo ciò che ho fatto

    NEL CONTROLLO ACTIVEX OCX:
    nel modulo di classe
    codice:
        Public Sub Blo_Sblo(vForm As Object)
          Dim co As Control
          For Each co In vForm.Controls
            If TypeOf co Is TextBox Then co.Enabled = False
            MsgBox co.Name
          Next
        End Sub
    NEL PROGETTO DI PROVA:
    vado nei componenti e lo spunto
    lo inserisco nel form e lo chiamo BS
    poi, nel form, in risposta all'evento di un commandbutton
    codice:
        Private Sub Command1_Click()
          Call BS.Blo_Sblo(Me)
        End Sub
    in questo modo però non vedo Blo_Sblo come metodo dell'ocx, e soprattutto dà errore sulla riga "Call BS.Blo_Sblo(Me)"
    (impossibile trovare il metodo o il membro dei dati)

  9. #9
    1) la classe è visibile aldifuori del controllo?
    2) il metodo della classe è richiamato da qualche procedura pubblica del controllo


    insomma quello che voglio chiedere il metodo che vuoi usare che scope ha?
    Vascello fantasma dei mentecatti nonchè baronetto della scara corona alcolica, piccolo spuccello di pezza dislessico e ubriaco- Colui che ha modificato l'orribile scritta - Gran Evacuatore Mentecatto - Tristo Mietitore Mentecatto chi usa uTonter danneggia anche te

  10. #10
    Utente di HTML.it
    Registrato dal
    May 2002
    Messaggi
    156
    è in pratica un pulsante che ha lo scopo di mettere enabled=true oppure enabled=false su tutti i controlli del form che viene passato col metodo.
    Inoltre cambia colore a seconda del blocco o sblocco.

    Una volta funzionante, poi vorrei inserire delle proprietà per escludere dei controlli dal blocco/sblocco.

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.