Acquista i nostri libri consigliati su Amazon.it
+ Rispondi al messaggio
Pagina 1 di 2 12 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 18

Riferimento a un oggetto SubForm

  1. #1
    davideleo non è in linea Scolaretto
    Già che mi sono appena iscritto pongo subito un secondo quesito sempre relativo a Microsoft Access.

    Mi è capitato più di una volta di dover creare funzioni che utilizzano come argomenti sia un controllo di una sottomaschera (ad esempio una casella di testo), sia il nome di quest'ultima, intendo il nome del controllo sottomaschera della maschera principale.

    Mi chiedevo se esiste un metodo per ridurre gli argomenti al solo controllo, ricavando il nome della sottomaschera da questo.

    Ho provato a utilizzare la proprietà Parent del controllo, ma mi restituisce il nome dell'oggetto origine della sottomaschera e non il nome della sottomaschera.
    Ultima modifica di davideleo; 16-06-2006 18:51 

  2. #2
    L'avatar di dragone bianco
    dragone bianco non è in linea Amanuense
    la sottomaschera è un oggetto che ha un nome Es Pippo

    Pippo.SourceObject restituisce il nome della maschera origine dell'oggetto sottomaschera.

    in parole povere quello che cercavi.

    Ciao
    ℹ️ Leggi di più su dragone bianco ...

  3. #3
    davideleo non è in linea Scolaretto
    Grazie della risposta Dragone, ma forse non mi sono spiegato bene.
    Io sto cercando la proprietà inversa, cioè individuare l'oggetto sottomaschera a partire dall'oggetto origine, o meglio a partire da un controllo dell'oggetto origine che chiamerò MyControl.

    Ora, mi sembra di capire che posso individuare l'oggetto origine come
    Codice PHP:
    MyControl.Parent 
    ed eventualmente anche l'insieme che contiene l'oggetto sottomaschera come
    Codice PHP:
    MyControl.Parent.Parent.Controls 
    Ma è possibile riconoscerlo nell'insieme dei controlli della maschera principale sapendo solo qual'è il suo oggetto origine e che è un controllo di tipo sottomaschera ?

  4. #4
    L'avatar di dragone bianco
    dragone bianco non è in linea Amanuense
    l'unica e cercare in ogni controllo se esiste una sua proprietà impostata con quello che cerchi

    Es
    MsgBox Form.Controls(0).Properties(6).Name

    Cos' visualizzi il nome della proprietà nume 5 del condrollo con index 0

    il sistema che pensi tu del parent al Contrario secondo me non esiste.

    Ciao
    ℹ️ Leggi di più su dragone bianco ...

  5. #5
    davideleo non è in linea Scolaretto
    Ho una mezza idea, ma forse tu puoi aiutarmi con l'altra metà. L'istruzione For Each...Next mi manda nel panico e non sono ancora riuscito a capire come si usa. Potrebbe servire allo scopo?
    Cioè: potrei usarla per analizzare tutti gli elementi della collezione MyControl.Parent.Parent.Controls fino a che trova quello con la proprietà Oggetto origine uguale a MyControl.Parent ? Se sì come?
    ℹ️ Leggi di più su davideleo ...

  6. #6
    valtercosso non è in linea Novello
    ho utilizzato questa riga per identificare uno specifico controllo in una sottomaschera: Me.sub_fr_fatt_emesse.Controls(a) = nt

    Private Sub Comando40_Click()
    Dim a
    Dim obj As Object ' dichiarazione di oggetto generico
    Dim nt As String ' variable stringa da valorizzareDim a
    Stop
    nt = "Ripassare per la consegna" ' esempio di valore assegnato
    For Each obj In Me!sub_fr_fatt_emesse.Form ' ciclo che recupera nome 'delle caselle di testo
    If TypeName(obj) = "textbox" Then
    a = obj.Name
    If a = "note" Then Me.sub_fr_fatt_emesse.Controls(a) = nt
    End If

    Next obj

    End Sub

    tienii informato ciao




    Mi è capitato più di una volta di dover creare funzioni che utilizzano come argomenti sia un controllo di una sottomaschera (ad esempio una casella di testo), sia il nome di quest'ultima, intendo il nome del controllo sottomaschera della maschera principale.

    Mi chiedevo se esiste un metodo per ridurre gli argomenti al solo controllo, ricavando il nome della sottomaschera da questo.

    Ho provato a utilizzare la proprietà Parent del controllo, ma mi restituisce il nome dell'oggetto origine della sottomaschera e non il nome della sottomaschera.[/QUOTE]

  7. #7
    davideleo non è in linea Scolaretto
    Grazie al tuo messaggio ho finalmente superato il mio blocco psicologico nei confronti dell'istruzione For Each...Next! E ho risolto il problema con questa funzione che ho chiamato GetSubForm.

    Function GetSubForm(Control As Control) As String
    
    Dim ctrControl As Control
    
    If Control.Parent.Name = Screen.ActiveForm.Name Then
       GetSubForm = Control.Parent.Name
    'Verifica se l'oggetto a cui appartiene il controllo è una maschera o una sottomaschera
    
    Else
      For Each ctrControl In Control.Parent.Parent
      If TypeName(ctrControl) = "SubForm" Then
        If ctrControl.SourceObject = Control.Parent.Name Then
           GetSubForm = ctrControl.Name
           Exit For
        End If
      End If
      Next
    End If
    End Function
    
    La funzione verifica prima che l'oggetto a cui apopartiene il controllo sia effettivamente una sottomaschera e non una maschera principale. In questo caso restituisce il nome della maschera principale.

    La scrivo, non per rispondermi da solo, ma perchè penso che possa essere utile in molti casi. A me ad esempio il problema è sorto perchè volevo creare una Sub per una stessa sottomaschera che è Oggetto Origine di diverse sottomaschere con nomi differenti. Quindi passare l'argomento NomeSottomaschera diventava un problema.
    Grazie comunque anche a Dragone

    Ciao

    P.S.
    Se qualcuno vede errori o nota problemi con la funzione, vi prego di scrivermi tutte le considerazioni del caso.
    ℹ️ Leggi di più su davideleo ...

  8. #8
    valtercosso non è in linea Novello
    OK leggendola mi sembra ottima, ciao

  9. #9
    davideleo non è in linea Scolaretto
    Ho trovato un "baco" nella mia funzione.
    Utilizzando come argomento una variabile di tipo Control può succedere erroneamente di passare alla funzione un argomento la cui proprietà Parent non è una maschera, ad esempio la proprietà Parent di un controllo di tipo Pulsante di Opzione è il controllo Gruppo di Opzioni.
    In questo caso il valore della funzione GetSubForm è Null.

    Avrei bisogno di restringere ulteriormente il tipo di dati dell'argomento. Come posso fare? Esiste un tipo di dati che include solo controlli del tipo casella di testo, casella combinata, ecc. e non i pulsanti di opzione, le etichette, ecc. ?
    ℹ️ Leggi di più su davideleo ...

  10. #10
    L'avatar di dragone bianco
    dragone bianco non è in linea Amanuense
    uoi gestire l'errore che genera con On error goto

    Attivando la gestione degli errori non viene interrotta la procedura in caso di errore ma puoi decidere cosa fare da codice:

    Es:
    (Tratto dal tuo codice)

    Dim ctrControl As Control
    
    on error goto Annulla'in caso di errore esegue la riga annulla
    
    If Control.Parent.Name = Screen.ActiveForm.Name Then
       GetSubForm = Control.Parent.Name
    'Verifica se l'oggetto a cui appartiene il controllo è una maschera o una sottomaschera
    
    Exit Sub
    Annulla:
                msgbox Err.description
    
    Oppure essiste la proprietà ControlType

    tratto dalla guida in linea
    È possibile utilizzare la proprietà ControlType in Visual Basic per determinare il tipo di controllo di una maschera o report. Elemento Byte in lettura e scrittura.

    espressione.ControlType
    espressione Obbligatorio. Espressione che restituisce uno degli oggetti indicati nell'elenco Si applica a.

    Impostazione
    L'impostazione della proprietà ControlType è una costante intrinseca che specifica il tipo di controllo.

    Costante Controllo
    acBoundObjectFrame Cornice di oggetto associato
    acCheckBox Casella di controllo
    acComboBox Casella combinata
    acCommandButton Pulsante di comando
    acCustomControl Controllo ActiveX (personalizzato)
    acImage Immagine
    acLabel Etichetta
    acLine Linea
    acListBox Casella di riepilogo
    acObjectFrame Cornice di oggetto non associato o grafico
    acOptionButton Pulsante di opzione
    acOptionGroup Gruppo di opzioni
    acPage Pagina
    acPageBreak Interruzione di pagina
    acRectangle Rettangolo
    acSubform Sottomaschera/sottoreport
    acTabCtl Struttura a schede
    acTextBox Casella di testo
    acToggleButton Interruttore


    Nota La proprietà ControlType può essere impostata solo utilizzando Visual Basic in visualizzazione Struttura della maschera o in visualizzazione Struttura del report, tuttavia è possibile leggere tale proprietà in tutte le visualizzazioni.
    Ciao
    ℹ️ Leggi di più su dragone bianco ...

+ Rispondi al messaggio
Pagina 1 di 2 12 ultimoultimo

Potrebbero interessarti anche ...

  1. Riferimento a subform in VBA
    Da Jocman nel forum Microsoft Access
    Risposte: 8
    Ultimo Post: 20-12-2019, 10:53
  2. Risposte: 3
    Ultimo Post: 10-11-2014, 19:54
  3. [VBA|Access2003] Riferimento a Subform
    Da gplele nel forum Microsoft Access
    Risposte: 1
    Ultimo Post: 16-12-2011, 10:22
  4. Risposte: 7
    Ultimo Post: 30-07-2010, 15:44
  5. Perdita riferimento oggetto MapiFolder
    Da jj75 nel forum Microsoft Word
    Risposte: 5
    Ultimo Post: 07-09-2009, 10:32