none
Identificare e usare il valore di testo per identificare un Object RRS feed

  • Domanda

  • Buongiorno, posto questo problema perchè non ho le idee chiare sulla gestione di OBJECT.
    Un tempo, parliamo del tempo preistorico dei linguaggi Basic/Clipper/Dbase/DBIV ecc.ecc., si poteva definire una variabile come una MACRO ($) ossia che il contenuto di questa variabile era il nome di  un Controllo...faccio un esempio:

    $VarNome="xMioControlloText"   espresso così potevo usare la variabile, ossia il "contenuto" di VarNome per gestire il controllo.

    Cerco di spiegarmi meglio:
    Supponiamo di avere un controllo TextBox di nome xMioControlloText e voler sapere il contenuto .TEXT di questo controllo dal nome contenuto nella variabile VarNome ...ossia VarNome = "xMioControlloText" come se fosse il nome del controllo stesso... esempio: 

    $VarNome.Click  alias xMioControlloText.Click      o     $VarNome.Text  alias xMioControlloText.Text

    Ho un Buttons (BtNewCar) e una TextBox (TxNewCar) che contiene il testo "Ciao", quindi al click su BtNewCar.Click sostituisco "Bt" con "Tx" in modo da riferirmi alla TextBox (TxNewCar):

    Ho scritto questo codice: 

    Dim xVar As TextBox
     xVar = New TextBox
     xVar.Name = Replace(sender.name, "Bt", "Tx")

    Certo è che la variabile xVar.Name è TxNewCar però non è la stessa me.TxNewCar , infatti:

    ? xVar.Name   
    TxNewCar   

    ? xVar.Text  
    ""

    invece
    ? me.TxNewCar.Text 
    "Ciao"

    Spero di aver reso l'idea...forse mi sto perdendo in un bicchiere d'acqua ma non ho trovato soluzione a questo.
    Per favore se mi potete dare qualche dritta...perlomeno se in .NET è fattibile o no.

    Grazie mille









    • Modificato NewContex martedì 7 aprile 2020 06:36
    martedì 7 aprile 2020 05:55

Risposte

  • Vediamo se ho capito cosa vuoi fare.

    In base al Button premuto, vuoi ottenere il riferimento ad un TextBox corrispondente in base al nome.

    Intanto, dal codice che hai scritto sopra, è normale che xVar non possa essere il TectBox che stai cercando, in quanto scrivi:

    xVar = New TextBox

    dunque hai dichiarato (non ho riportato la dichiarazione) la variabile xVar, e poi hai valorizzato questa variabile con una *nuova* istanza di un TextBox, e chiaramente se è nuova, non può essere una esistente.

    codice Se vuoi, puoi usare il metodo Find esposto dalla ControlCollection Controls della form, una cosa del tipo

    Dim ctrl As Control
            Dim Nome As String = "NomeControllo"
            Dim mtxCtrl = Me.Controls.Find(Nome, True)
            ctrl = mtxCtrl(0)

    Tieni conto che il metodo Find ti restituisce una matrice di controlli che corrispondono ai criteri, dovrai quindi verificare che ci sia un controllo, e solo uno nella tua matrice.

    Se il nome non dovesse essere valido, cioè nessun controllo ha il nome che cerchi, la matrice sarà vuota, quindi non ci sarà nessun elemento 0 da prendere e l'ultima riga andrà in errore. Devi quindi verificare le varie codnizioni

    • Contrassegnato come risposta NewContex martedì 7 aprile 2020 09:52
    martedì 7 aprile 2020 09:24

Tutte le risposte

  • Non ho capito il tuo obiettivo
    martedì 7 aprile 2020 08:32
  • Vediamo se ho capito cosa vuoi fare.

    In base al Button premuto, vuoi ottenere il riferimento ad un TextBox corrispondente in base al nome.

    Intanto, dal codice che hai scritto sopra, è normale che xVar non possa essere il TectBox che stai cercando, in quanto scrivi:

    xVar = New TextBox

    dunque hai dichiarato (non ho riportato la dichiarazione) la variabile xVar, e poi hai valorizzato questa variabile con una *nuova* istanza di un TextBox, e chiaramente se è nuova, non può essere una esistente.

    codice Se vuoi, puoi usare il metodo Find esposto dalla ControlCollection Controls della form, una cosa del tipo

    Dim ctrl As Control
            Dim Nome As String = "NomeControllo"
            Dim mtxCtrl = Me.Controls.Find(Nome, True)
            ctrl = mtxCtrl(0)

    Tieni conto che il metodo Find ti restituisce una matrice di controlli che corrispondono ai criteri, dovrai quindi verificare che ci sia un controllo, e solo uno nella tua matrice.

    Se il nome non dovesse essere valido, cioè nessun controllo ha il nome che cerchi, la matrice sarà vuota, quindi non ci sarà nessun elemento 0 da prendere e l'ultima riga andrà in errore. Devi quindi verificare le varie codnizioni

    • Contrassegnato come risposta NewContex martedì 7 aprile 2020 09:52
    martedì 7 aprile 2020 09:24
  • PERFETTO! vbMizio... esattamente quello che volevo fare...non conoscevo la propietà FIND sui controlli...utilissima.

    Grazie mille... hai centrato il problema...complimenti!



    • Modificato NewContex martedì 7 aprile 2020 09:53
    martedì 7 aprile 2020 09:52