Selezionare textbox col tasto invio

di il
16 risposte

Selezionare textbox col tasto invio

Salve a tutti mi chiamo Claudio e sono nuovo di questo forum

il mio problema è : ho 8 + 8 textbox e le vorrei

selezionare col tasto invio, senza dover scrivere ad ogni

textbox sempre col tasto invio tramite il .KeyUp  ,e.KeyCode = 13

ad ogni textbox

c'è qualche altro sistema senza dover riscrivere le stesse istruzioni ?

spero di essere stato abbastanza chiaro.

Grazie 1000 per ogni dritta.

16 Risposte

  • Re: Selezionare textbox col tasto invio

    14/10/2023 - Elmodifica ha scritto:


    il mio problema è : ho 8 + 8 textbox e le vorrei

    selezionare col tasto invio, senza dover scrivere ad ogni

    textbox sempre col tasto invio tramite il .KeyUp  ,e.KeyCode = 13

    Cosa intendi di preciso? Vorresti che premendo INVIO su una delle TextBox si passasse automaticamente a un'altra delle TextBox in sequenza?

    Da un certo punto di vista, mi sentirei di scoraggiare questa strada, dato che il funzionamento delle finestre e il ruolo di alcuni tasti in Windows (vedi INVIO, TAB, ecc.) ha un comportamento ben prestabilito, e alterarlo significa portare fuori dalle abitudini gli utenti dell'applicazione.

    Ciò detto, potresti 1) assegnare il medesimo evento KeyUp a tutte le caselle e 2) definire un array o una lista che contenga i riferimenti alle TextBox presenti nell'interfaccia; quando premi INVIO, nel codice dell'evento verifichi la posizione della TextBox nell'array e sposti il focus su quella che si trova nella posizione successiva.

    Prova a ragionarci sopra, magari anche a seguito di possibili altri suggerimenti che arriveranno.

  • Re: Selezionare textbox col tasto invio

    Ma tu cosa hai scritto?

    Non puoi gestire il taborder da…. a….?

    Tante sono le strade percorribili.

    Puoi evocare il tasto tab virtuale alla pressione del tasto invio e lasciare che il focus si sposti seguendo il taborder.

    Un ulteriore codice servirebbe per saltare un taborder a seuito del tipo di dato inserito su un editbox.

    Esempio: partita iva  e codice fiscale sono uguali nel caso di personalità giuridica passi copi il contenuto su codice fiscale e non fai il tabstop sul campo codice fiscale ma passi al successivo ancora.

    Ergo la domanda. Cosa devi fare esattamente? Rispettare il taborder o impostare il focus manualmente?

    Perché scrivi 8+8 e non 16? Ha un significato particolare? Passi dai primi otto agli ulteriori otto in base a condizioni?

  • Re: Selezionare textbox col tasto invio

    14/10/2023 - sihsandrea ha scritto:


    Non puoi gestire il taborder da…. a….?

    In effetti, a pensarci bene si può tranquillamente semplificare il tutto usando l'ordine di tabulazione.

    Nel caso si voglia passare al controllo successivo senza usare il TAB, si potrebbe definire un unico evento KeyUp per tutte le caselle di testo e all'interno invocare SelextNextControl() per passare al successivo nell'ordine di tabulazione.

    In breve, così si potrebbe passare da un controllo all'altro con INVIO oltreché con il TAB.

    Se invece, come facevi presente tu, l'ordine da usare con INVIO è diverso da quello del TAB, determinato dal valore della proprietà TabStop, allora occorre adottare un altro sistema, o memorizzare altrove questo ordine.

  • Re: Selezionare textbox col tasto invio

    14/10/2023 - Elmodifica ha scritto:


    textbox sempre col tasto invio tramite il .KeyUp  ,e.KeyCode = 13

    ad ogni textbox

    c'è qualche altro sistema senza dover riscrivere le stesse istruzioni ?

    Ciao,

    non molto chiaro …. se ho capito bene non vorresti creare tanti eventi quante sono le textbox ? 

    In tal caso prova a scrivere l'evento per esempio solo sulla prima textbox e a tutte le altre, sempre negli eventi, associ lo stesso evento che hai creato sulla prima textbox 

    Quindi nel codice hai solo un evento e tutte le textbox richiamano tale evento.

  • Re: Selezionare textbox col tasto invio

    Grazie a tutti voi più o meno il mio problema l'avete capito

    e vi ringrazio, ora posto un esempi che ho fatto ma però non funziona

    e non capisco il perché sicuramente la mia inesperienza in fatto di oggetti

    sinceramente mai capiti , vado sempre a tentativi.

    questo è l'esempio:

        Private Sub txtEnd_KeyUp(sender As Object, e As KeyEventArgs) Handles txtEnd.KeyUp, txtEnd.KeyUp, txtGar.KeyUp, txtTri.KeyUp,
           txtScuo.KeyUp, tztLav.KeyUp, txtNolTri.KeyUp, txtCamp.KeyUp
           Dim passaScheda As TextBox() = {txtEnd, txtEnd, txtGar, txtTri, txtScuo, tztLav, txtNolTri, txtCamp}

           If e.KeyCode = 13 Then
               For a As Integer = 0 To 7
                   'x = x + 1
                   x = passaScheda(a).Text
                   'MsgBox("pippo     " & x)
                   'Exit Sub
               Next
           End If

       End Sub

    vi chiedo gentilmente piccolo aiutino grazie 1000 comunque

  • Re: Selezionare textbox col tasto invio

    15/10/2023 - Elmodifica ha scritto:


    Grazie a tutti voi più o meno il mio problema l'avete capito

    Più o meno l'abbiamo capito, ma tutti abbiamo posto domande specifiche su quello che doveva essere l'intento preciso, domande a cui non hai risposto.

    15/10/2023 - Elmodifica ha scritto:


    e vi ringrazio, ora posto un esempi che ho fatto ma però non funziona

    Non funziona… ovvero? Ti da errore? Si comporta diversamente da ciò che ti aspetti? E in che modo?

    Va bene chiedere una mano a risolvere un problema, ma se chi risponde deve anche provvedere a inventarsi il problema, mi pare un po' eccessivo: è compito di chi chiede aiuto fornire tutti i dettagli, e qui mancano sia in apertura che dopo svariate richieste di altri utenti.

  • Re: Selezionare textbox col tasto invio

    15/10/2023 - Alka ha scritto:


    Va bene chiedere una mano a risolvere un problema, ma se chi risponde deve anche provvedere a inventarsi il problema, mi pare un po' eccessivo: è compito di chi chiede aiuto fornire tutti i dettagli, e qui mancano sia in apertura che dopo svariate richieste di altri utenti.

    Sante parole Alka …. in questi casi ci vuole un detective e spettare la fine delle indagini…. ;-))  

  • Re: Selezionare textbox col tasto invio

    15/10/2023 - Elmodifica ha scritto:


    ma però

    O ma o però…

    15/10/2023 - Elmodifica ha scritto:


     If e.KeyCode = 13 Then
               For a As Integer = 0 To 7
                   'x = x + 1
                   x = passaScheda(a).Text
                   'MsgBox("pippo     " & x)
                   'Exit Sub
               Next
           End If

    Riesci a spiegarlo?

    X è il valore (ignoto per quanto riguarda il tipo) restituito da una funzione “passascheda” ma si parla di tabulazione di edit o di pagetab?

    Se devi passare da una pagetab all'altra basta indicare o il nome della pagina o l'indice della pagina.

    Come ti ha detto Alka non sai spiegare agli umani il tuo problema, come puoi farlo capire ad una macchina?

    Spiega di che componente o oggetto parli, cosa vuoi che succeda alla pressione “invio” e soosta il codice dall'evento keyup all'evento keypress.

    Con keydown: Se premi e tieni premuto invio il codice viene eseguito

    Con keyup il codice viene eseguito appena rilasci invio

    Con keypress il codice viene eseguito se premi e rilasci il tasto.

    Che sia qui l'errore? E quale errore? Booohhh!!??

    Come ti ho detto, hai n+1 modi per comandare la tabulazione ma serve capire cosa vuoi ottenere.

    Per completezza, puoi intercettare la pressione di un tasto e inibirlo o sostituirlo con un altro tasto (virtual key)

    If key=13 then key==vk_tab oppure key==nil (o nel tuo caso qualcosa del genere, basta controllare le virtual key).

    https://learn.microsoft.com/it-it/windows/win32/inputdev/virtual-key-codes

  • Re: Selezionare textbox col tasto invio

    15/10/2023 - Elmodifica ha scritto:


    passaScheda(a).Text

    Lo sto vedendo solo ora… 

    Text? Stai tabulando o stai leggendo il valore?

    Forse stai cercando il nome dell'oggetto dove premi invio? E dire di spostarsi all'oggetto nome+1?

    Non basta chiamare gli oggetti edit1, edit2, …, editN.

    Una facile: Crea una variabile globale, all'evento enter setti il numero +1 che compone il nome dell'oggetto (esempio: se l'oggetto si chiama edit3, la variabile ha valore 4),  e poi, in vb.net dovrebbe essere findcontrol("nometuocontrollosenzanumero"+variabileglobale).faiqualcosa

    Tradotto sarebbe findcontrol(edit4).faiqualcosa

    Se la variabile è tipo testo non hai problemi di conversione.

    Se da edit3 devi andare su edit7 all'enter setti la variabile globale a 7.

    Auguri.

  • Re: Selezionare textbox col tasto invio

    Ok mi scuso se non ho dato le relative risposte, ho provato di tutto senza risultato, mi sa che tengo la normale tabulazione e rinumcio ad usare il tasto invio per passare alla successiva textbox,

    Grazie comunque a tutti e scusatemi se non ho dato 

    Sufficienti risposte.

  • Re: Selezionare textbox col tasto invio

    Ma perchè rinunci invece di rispondere alle domande?

    Perché non usi il suggerimento di usare 

    SelectNextControl()

    ?

  • Re: Selezionare textbox col tasto invio

    Grazie all'amico oregon

    sono riuscito a risolvere il mio problema

    posto il listato, devo ancora sistemarlo

    ma per il momento funziona .

    grazie per la dritta.

        Private Sub txtEnd_KeyUp(sender As Object, e As KeyEventArgs) Handles txtEnd.KeyUp, txtGar.KeyUp, txtTri.KeyUp,
           txtScuo.KeyUp, tztLav.KeyUp, txtNolTri.KeyUp, txtCamp.KeyUp, txtAbbil.KeyUp, txtCorrCamp.KeyUp
           Dim campo As Int16
           'Dim conto As Int16
           If e.KeyCode = Keys.Enter Then
               'conto = Me.ActiveControl.TabIndex
               campo = Me.ActiveControl.TabIndex
               Me.SelectNextControl(Me.ActiveControl, True, True, True, True)
               If campo = 1 Then txtGar.Focus()
               If campo = 2 Then txtTri.Focus()
               If campo = 3 Then txtScuo.Focus()
               If campo = 4 Then tztLav.Focus()
               If campo = 5 Then txtNolTri.Focus()
               If campo = 6 Then txtScuo.Focus()
               If campo = 7 Then txtCamp.Focus()
           End If
           'Next


       End Sub

  • Re: Selezionare textbox col tasto invio

    15/10/2023 - Elmodifica ha scritto:


               Me.SelectNextControl(Me.ActiveControl, True, True, True, True)
               If campo = 1 Then txtGar.Focus()

    Quando si parlava di usare SelectNextControl(), non ci si riferiva al fatto di buttarlo in mezzo al codice, ma di leggere qual è il suo scopo e usarlo per risolvere il problema.

    Nel tuo codice, puoi anche toglierlo perché è praticamente ininfluente: lo scopo di quel metodo è spostare il focus al controllo successivo della tabulazione, ma poi tu chiami .Focus() su un altro controllo in base a delle condizioni, quindi di fatto ti “rimangi” quello che viene eseguito con SelectNextControl().

    Se il tuo programma dice di andare al prossimo punto, che è “A”, e poi chiami il comando che si sposta su “B”, tanto vale che vai direttamente a “B”.

    Quando si programma, si deve leggere il codice, ragionare su quello che fa (anche a voce alta) e capire l'iter delle operazioni.

  • Re: Selezionare textbox col tasto invio

    Grazie della bacchettata ,ci sta 

    visto che faccio molta fatica a leggere le istruzioni in merito

    ma d'altronde non sono un professionista , ma un semplice vecchietto

    che si diverte a smanettare in visual studio.

    scusate se vi chiedo aiuto, essendo ignorante in materia tante cose 

    non le capisco.

    Tornando al listato avevi ragione non serve a niente 

    Me.SelectNextControl(Me.ActiveControl, True, True, True, True)

    in effetti con campo = Me.ActiveControl.TabIndex e un select case ho risolto il problema.

    grazie ancora.

Devi accedere o registrarti per scrivere nel forum
16 risposte