+ Rispondi al messaggio
Visualizzazione dei risultati da 1 a 9 su 9

abilitare/disabilitare campo in modo alternativo ad elenco di righe di codice on load

  1. #1
    L'avatar di muttley005
    muttley005 non è in linea Topo di biblioteca
    Ciao,
    scusatemi se il titolo risultasse poco chiaro ...

    ho una form non associata in cui all'apertura carico nei controlli (textbox, list, combo, ...) dati presi da una query/tabella (non ha importanza).

    L'abilitazione di alcuni dei controlli è subordinata ad altri (per fare un esempio stupido il CheckBox "PATENTE" se True/False deve rendere abilitata/disabilitata la TextBox "ANNO_PATENTE") per cui potrei fare, post caricamento dati, una elenco di righe di codice tipo
    'se dipende da un CheckBox (flag)
    Me.CampoSubordinato1.Enabled = me.CampoSubordinante1
    'se dipende da un valore (textbox)
    Me.CampoSubordinato2.Enabled = (me.CampoSubordinante2 = valoreCondizionante)
    
    Sto cercando un modo alternativo a questo (ne ho tanti di "campi condizionati") e diciamo + "automatico".

    Ho pensato quindi di mettere nella proprietà TAG del campo subordinato il nome del campo subordinante per cui
        For Each C In Me.Controls
            If C.Tag <> vbNullString
                C.Enabled = Me(C.Tag)
            End If
        Next
    
    Questo funziona benissimo per i checkbox ... ma se ad esempio dovessi mettere una condizione (nel TAG) tipo "NomeCampo=5" ?!
    Avevo pensato alla funzione Eval ma sbagliavo...

    Magari mi sto perdendo in un bicchier d'acqua ma ora come ora non mi viene in mente nulla ....
    Suggerimenti?

    M.

    EDIT: L'unica cosa, proseguendo su questa strada, che mi viene in mente è di andare ad analizzare il TAG "spezzandolo" in blocchi ... ma cercavo un modo più ... easy.

  2. #2
    L'avatar di @Alex
    @Alex non è in linea Moderatore Globale
    Ed invece EVAL funziona bene... ma tu sicuramente hai scritto una sintassi errata...!

    Ti faccio un esempio...
    ' NON FUNZIONANTE
    MsgBox EVAL("Id=5")
    
    ' FUNZIONANTE
    MsgBox EVAL("Forms!NomeForm!Id=5")
    
    Tu cosa hai scritto...?
    ℹ️ Leggi di più su @Alex ...

  3. #3
    L'avatar di @Alex
    @Alex non è in linea Moderatore Globale
    Aggiungo solo una cosa che non ho espresso... io userei il metodo standard... il primo che tu vuoi sostituire...
    Pensa solo a fare DEBUG su EVAL... è impossibile.
    ℹ️ Leggi di più su @Alex ...

  4. #4
    L'avatar di muttley005
    muttley005 non è in linea Topo di biblioteca
    nel tag avevo messo solo il nome campo ed il valore ad esempio "NomeCampo = 5" ...
    ecco! vedi che era facilissimo
    devo specificare per intero form, campo ... ok, grazie Alex!

  5. #5
    L'avatar di muttley005
    muttley005 non è in linea Topo di biblioteca
    si ok, ma quel codice messo nel TAG non dovrebbe cambiare mai direi.
    ... ecco ... se mi dici così però ... ... allora valuto ...
    Comunque, anche solo a livello didattico ho imparato ad usare "bene" l'Eval
    Grazie!

  6. #6
    L'avatar di @Alex
    @Alex non è in linea Moderatore Globale
    Sei sicuro...?
    Prova a farlo funzionare con campi Testo o con Funzioni a più parametri...
    ℹ️ Leggi di più su @Alex ...

  7. #7
    L'avatar di muttley005
    muttley005 non è in linea Topo di biblioteca
    forse non riesco a cogliere i tuoi dubbi sul funzionamento perchè mi sembra tutto a posto ... mumble mumble
    io ho messo questo codice
        For Each C In Me.Controls
            If C.Tag <> vbNullString And C.Tag <> "LOAD" Then
                C.Enabled = Eval(C.Tag)
            End If
        Next
    
    e nei tag ho inserito di ogni ...
    ti posto alcuni esempi:

    1) il + semplice su un campo subordinante CheckBox
    Forms!NomeForm!NomeCheckBox
    
    2) su un campo subordinante CheckBox col NOT
    NOT Forms!NomeForm!NomeCheckBox2
    
    3) su un campo subordinante Combo
    Forms!NomeForm!NomeCombo in ('valore1','valore2')
    
    4) su + campi subordinanti
    Forms!NomeForm!NomeCheckBox1 and Forms!NomeForm!NomeCheckBox2
    
    cosa mi sfugge? (il discorso del debug ho capito che è di difficile analisi/ricerca errori)

  8. #8
    L'avatar di @Alex
    @Alex non è in linea Moderatore Globale
    Non ti sfugge nulla come sintassi dal momento che funziona... anche perchè ho capito ora che scrivi a MANO il valore TAG... io pensavo lo facessi scrivere via codice a Design...
    ℹ️ Leggi di più su @Alex ...

  9. #9
    L'avatar di muttley005
    muttley005 non è in linea Topo di biblioteca
    ok, allora le conclusioni sono che ... il metodo "alternativo" funziona ma

    1) non è + veloce scrivere i TAG a mano piuttosto che le N righe a codice sull'onLoad (anche perchè se "sposto" la form a diventare subform di un'altra... ciao TAG! sarebbero tutti da cambiare)
    2) sarebbe + comodo fare eventuali variazioni sul vba piuttosto che nei tag
    3) così facendo occupo la proprietà tag che diversamente sarebbe libera per altri scopi

    quindi diciamo che è stato tutto a scopo didattico

    Grazie Alex! ... come sempre competentissimo

+ Rispondi al messaggio

Potrebbero interessarti anche ...

  1. Abilitare / non disabilitare filtro
    Da chiaravar nel forum Microsoft Excel
    Risposte: 2
    Ultimo Post: 08-01-2018, 13:40
  2. Abilitare/disabilitare tasto F11
    Da Pippino3 nel forum Microsoft Access
    Risposte: 2
    Ultimo Post: 24-05-2017, 18:33
  3. Risposte: 15
    Ultimo Post: 29-02-2016, 18:50
  4. disabilitare e abilitare tasto
    Da donini nel forum Visual Basic 6
    Risposte: 2
    Ultimo Post: 04-02-2007, 23:12
  5. Creare db in modo alternativo
    Da marci nel forum Microsoft Word
    Risposte: 1
    Ultimo Post: 04-09-2006, 23:35