Acquista i nostri libri consigliati su Amazon.it
+ Rispondi al messaggio
Visualizzazione dei risultati da 1 a 5 su 5

Classe di controlli: come gestire i controlli di una subform?

  1. #1
    L'avatar di zacca62
    zacca62 non è in linea Scolaretto
    Buongiorno

    in una form gestisco i controlli in istanze di una stessa classe, a loro volta inserite in una class collection, sulla traccia della demo GEN_MULTICAST_MASTER di @Alex ... La mia domanda è se è possibile gestire allo stesso modo i controlli della subform, ossia se si possono associare alla stessa classe controlli e poi accodare nella stessa collection della form principale.

    Grazie
    ℹ️ Leggi di più su zacca62 ...

  2. #2
    L'avatar di @Alex
    @Alex non è in linea Moderatore Globale
    Quote Originariamente inviato da zacca62 Visualizza il messaggio
    Buongiorno

    in una form gestisco i controlli in istanze di una stessa classe, a loro volta inserite in una class collection, sulla traccia della demo GEN_MULTICAST_MASTER di @Alex ... La mia domanda è se è possibile gestire allo stesso modo i controlli della subform, ossia se si possono associare alla stessa classe controlli e poi accodare nella stessa collection della form principale.

    Grazie
    Devi costruire una Funzione in modo che sia RICORSIVA... in sostanza, quando Cicli la Collection Controls, nel caso in cui il Control sia una acSubForm, devi passare l'oggetto ctl.Form(essendo una SubForm) alla Funzione stessa...
    Esempio
    Private Sub Form_Load()
       Call Istanza(Me)
    End Sub
    
    Function Istanza(frm as Access.Form)
    
        On Error Resume Next
        Dim ctl As Access.Control
        Dim prp As mclsProperties
        Set mcl = New mclsControls
        Set mcl.Parent = Me
        
        For Each ctl In frm .Controls
            If ctl.ControlType=acSubForm Then 
                Call Istanza(ctl.Form)
            Else
              If ctl.Tag = "X" Then
                mcl.Add ctl
                ' Se le formattazioni sono TIPICHE dell'APPLICATIVO è doveroso
                ' farle nella CLASSE [mclsControls]
                'With mcl.Add(ctl)
                '    .Properties.Add "ForeColor", vbRed, ctl.ForeColor
                '    .Properties.Add "FontBold", True, ctl.FontBold
                '    .Properties.Add "FontUnderline", True, ctl.FontUnderline
                '    .Properties.Add "BackColor", vbGreen, ctl.BackColor
                'End With
              End If
           End If
        Next
    .....
    
    ℹ️ Leggi di più su @Alex ...

  3. #3
    L'avatar di zacca62
    zacca62 non è in linea Scolaretto
    Buongiorno @Alex,

    ho provato la tua soluzione ma non sono riuscito a farla funzionare.
    In pratica non riuscivo ad associare i controlli della subform alla collection, che invece era il motivo di questo thread.
    Penso che l'errore, se così si può chiamare, derivava dal fatto che la funzione richiamando se stessa dal principio istanzia più volte la collection clsControls (che nel mio db si chiama sytControls) ...

    Per risolvere ho considerato la subform come un normale control della form principale e quando il ciclo la incontra fa a sua volta partire un secondo ciclo For.. Each. Di seguito il codice della soluzione che ho trovato ...

    Private Sub Form_Load()
    On Error GoTo ErrHandler
    
        Dim ctl As Control, sx As String, subCtl As Control
        
        Set mCol = New sytControls
        Set mCol.Parent = Me
        
        For Each ctl In Me.Controls
            sx = ctl.Name
            Select Case ctl.ControlType
            Case acTextBox, acComboBox
                mCol.Add ctl
                With mCol.Item(sx)
                ' codice per la formattazione, ecc...
                '...............................
                End With
            Case acCommandButton
                With mCol.Item(sx)
                ' codice per la formattazione, ecc...
                '...............................
                End With
                mCol.Add ctl
                
            Case acSubform
                mCol.Add ctl
                With mCol.Item(sx)
                    For Each subCtl In .Control.Form.Controls
                        If subCtl.ControlType = acCommandButton Then
                            mCol.Add subCtl
                        End If
                    Next
                    .Control.Form.Visible = False
                End With
            End Select
        Next
    
    Che ne pensi?
    Grazie in anticipo.
    ℹ️ Leggi di più su zacca62 ...

  4. #4
    L'avatar di @Alex
    @Alex non è in linea Moderatore Globale
    Penso che hai sbagliato qualche cosa... perchè quanto ti ho suggerito è l'unico modo giusto.
    ℹ️ Leggi di più su @Alex ...

  5. #5
    L'avatar di zacca62
    zacca62 non è in linea Scolaretto
    Sì, hai ragione: la mia soluzione funziona solo a metà, nel senso che consente l' associazione dei controlli (e quindi l'attivazione degli eventi) ma non l'impostazione delle proprietà ... Ora il problema è risolto.

    Grazie ancora.
    ℹ️ Leggi di più su zacca62 ...

+ Rispondi al messaggio

Potrebbero interessarti anche ...

  1. Risposte: 33
    Ultimo Post: 05-06-2020, 12:49
  2. gestire controlli non associati (molti) in una maschera
    Da BennyB nel forum Microsoft Access
    Risposte: 5
    Ultimo Post: 19-10-2018, 18:42
  3. Articolo: Gestire controlli Image a runtime
    Da MarcoGG nel forum Visual Basic 6
    Risposte: 2
    Ultimo Post: 12-01-2011, 20:25
  4. [VB6] gestire eventi di controlli creati a run time
    Da spikexx84 nel forum Visual Basic 6
    Risposte: 13
    Ultimo Post: 09-07-2008, 13:22
  5. Gestire le proprietà di tutti i controlli in un form
    Da pietrorolli nel forum Visual Basic 6
    Risposte: 7
    Ultimo Post: 08-04-2008, 23:48