Italian [RISOLTO] [B4A] Simulare il KeyPress in un EditText

Discussion in 'Italian Forum' started by Giorgio Brausi, Nov 8, 2018 at 11:08 AM.

  1. Giorgio Brausi

    Giorgio Brausi Member Licensed User

    Salve,

    sono fresco fresco di B4A e non riesco a capire come simulare l'evento KeyPress che trovo disponibile solo per l'Activity, mentre io vorrei averlo in un EditText.
    Tra l'altro, l'evento KeyPress dell'Activity viene attivato solo quanto premo il pulsante indietro dello smartphone, ma non quando premo altri tasti (lettere o numeri).

    Ho fatto una ricerca nel forum ed ho visto che questo problema è molto 'sentito' ma non sembra esservi una soluzione (oppure io non sono riuscito a capirla).
    Davvero non c'è modo di intercettare la pressione del singolo KeyCode?


    P.S. In Visual Basic ero abituato ad avere disponibile l'evento KeyPress per ogni singolo controllo di edit, mi chiedo come mai non sia stato previsto in B4A.
     
    Last edited: Nov 8, 2018 at 11:13 AM
  2. sirjo66

    sirjo66 Well-Known Member Licensed User

    Ciao Giorgio e benvenuto fra noi :)

    Purtroppo rispetto al VB.NET troverai tante cose che mancano, ma normalmente queste limitazioni non sono riferite al B4A ma proprio al SO Android e/o al linguaggio Java.

    Detto questo, come hai già avuto modo di vedere, l'evento Activity_KeyPress serve solo per intercettare i pulsanti "fisici" del telefonino.
    Sull'oggetto EditText hai solo a disposizione questi eventi:
    Code:
    TextChanged (Old As String, New As String)
       
    ' The TextChanged event fires whenever the text changes and it includes the old and new strings.
    EnterPressed
       
    ' The EnterPressed event fires when the user presses on the enter key or action key (Done or Next).
    FocusChanged (HasFocus As Boolean)
       
    ' The FocusChanged event fires when the view is focused or loses focus. The HasFocus parameter value will be set accordingly.
    Dovrai quindi utilizzare TextChanged ed analizzare Old string e New string per capire cosa hanno digitato, il problema è che potresti avere il carattere digitato in mezzo alla stringa, non è detto che l'abbiano digitato alla fine.

    Cosa ti serviva intercettare il singolo carattere ???

    Ciao ciao
    Sergio
     
    LucaMs likes this.
  3. LucaMs

    LucaMs Expert Licensed User

    Come si fa a trovare cose che... mancano? :D
     
    Giorgio Brausi and sirjo66 like this.
  4. Giorgio Brausi

    Giorgio Brausi Member Licensed User

    Ciao @sirjo66
    felice di risentirti.

    Me ne sto accorgendo pian piano... :(

    Proprio così.
    Il fatto è che il KeyPress (come tu ben sai) mi permetterebbe di verificare il carattere prima che questo raggiunga l'EditText per stabilire se lasciarlo 'passare', o meno.
    Come accade in VB6/VB.NET.

    Nello specifico, quando l'utente preme un determinato carattere (RETURN), quest'ultimo deve essere annullato e deve partire una specifica routine.
    Ad esempio, se leggo un barcode con un lettore ad emulazione di tastiera, voglio intercettare il carattere finale, aggiunto dal lettore, che comunica di aver terminato la lettura.
    Credo che compiere questa verifica nel TextChanged sia improponibile, perché l'evento si verifica dopo aver inserito il carattere, mentre io devo intercettare il carattere prima che venga inserito.
    Ma questo è solo uno dei casi.

    Francamente mi stupisce che non sia stato previsto un evento di questo tipo.:rolleyes:

    P.S. Avevo provato ad utilizzare il Sender nell'evento Activity_KeyPress() ma come già detto questo evento non funziona con i tasti 'normali' per cui, nisba. :(
     
    Last edited: Nov 8, 2018 at 1:29 PM
  5. sirjo66

    sirjo66 Well-Known Member Licensed User

    Nel tuo caso specifico la cosa è molto semplice, dato che il carattere RETURN scatena l'evento EnterPressed e quindi gestisci tutto da lì, io con la lettura dei codici a barre ho risolto così.
     
    Giorgio Brausi and LucaMs like this.
  6. Giorgio Brausi

    Giorgio Brausi Member Licensed User

    C'avevo pensato anch'io all'evento EnterPressed, ma francamente mi sembrava strano non si potesse gestire come ho sempre fatto in VB6/VB.NET/C# in tutti questi anni.
    Nel caso del barcode, vada, me per tutti gli altri casi dovrò invece trovarmi un qualche workaround.

    Grazie Sergio. :)
     
  7. sirjo66

    sirjo66 Well-Known Member Licensed User

    Di nulla Giorgio, ci mancherebbe altro.
    Ricordati che in questo forum quando qualcuno ti dà una risposta utile è buona norma cliccare sulla destra il link con scritto "Like" per ringraziare ;)
     
    Last edited: Nov 10, 2018 at 12:50 PM
    Star-Dust likes this.
  8. Giorgio Brausi

    Giorgio Brausi Member Licensed User

Loading...
  1. This site uses cookies to help personalise content, tailor your experience and to keep you logged in if you register.
    By continuing to use this site, you are consenting to our use of cookies.
    Dismiss Notice