Riselezionare textbox



  • Riselezionare textbox
    di alfrimpa data: 28/09/2015 15:35:56

    Ciao a tutti

    Immaginiamo di avere una userform con due textbox

    Ponendo un controllo sulla lunghezza della stringa inserita in textbox1 io vorrei che il focus rimanesse su textbox1 e non venisse selezionata la textbox2 qualora la stringa inserita in textbox1 non sia della giusta lunghezza (4 caratteri).

    Con la sottostante macro questo non succede; il cursore va comunque in textbox2.

    Se invece associo il codice ad un pulsante di comando tutto funziona regolarmente.

    Dove sbaglio?

    Alfredo 
     
    Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
    If Len(Me.TextBox1) <> 4 Then
        MsgBox "Errore"
        Me.TextBox1.SetFocus
    End If
    End Sub
    






  • di Marius44 data: 28/09/2015 16:20:48

    Ciao Alfredo
    Invece che nell'evento Exit metterei il codice in Change ed aggiungerei le due righe
    sottostanti prima dell'End if.

    Fammi sapere. Ciao,
    Mario
     
    Me.TextBox1.SetFocus
    SendKeys "{ESC}"



  • di scossa data: 28/09/2015 16:24:20

    cit.: "Dove sbaglio?"

    Elimina il codice dell'evento Enter della TextBox1 e usa l'evento Enter della TextBox2 (vedi sotto).



    scossa's web site
    Se tu hai una mela, ed io ho una mela, e ce le scambiamo, allora tu ed io abbiamo sempre una mela per uno. Ma se tu hai un'idea, ed io ho un'idea, e ce le scambiamo, allora abbiamo entrambi due idee.
    (George Bernard Shaw)

     
    Private Sub TextBox2_Enter()
      If Len(Me.TextBox1) <> 4 Then
          MsgBox "Errore"
          Me.TextBox1.SetFocus
      End If
    
    End Sub



  • di cromagno data: 28/09/2015 16:40:46

    Ciao a tutti,
    Alfredo, al posto di "SetFocus" potresti usare "Cancel = True"....
     
    Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
    If Len(Me.TextBox1) <> 4 Then
        MsgBox "Errore"
        Cancel = True
    End If
    End Sub
    



  • di Cucù data: 28/09/2015 18:17:38

    Non so ce ho capito, ma io in casi simili utilizzo la proprietà Visible oppure Enable dipende dall'effetto che voglio ottenere.
    Il risultato è ovviamente nel primo caso che la textbox2 diventa visibile solo se si verica la condizione che vogliamo, nel secondo caso è visibile sempre ma diventa "utilizzabile" solo se si verifica una determinata condizione.
    Cucù



  • di scossa data: 28/09/2015 20:00:44

    cit. cromagno: "Alfredo, al posto di "SetFocus" potresti usare "Cancel = True"...."

    Giusto cromagno, la risposta più logica.

    Mi scuso per la mia risposta precedente: troppo frettolosa e superficiale (stavo uscendo)



    scossa's web site
    Se tu hai una mela, ed io ho una mela, e ce le scambiamo, allora tu ed io abbiamo sempre una mela per uno. Ma se tu hai un'idea, ed io ho un'idea, e ce le scambiamo, allora abbiamo entrambi due idee. (George Bernard Shaw)



  • di cromagno data: 28/09/2015 22:33:29

    @scossa
    essendo un novizio del vba, ogni giorno cerco di imparare qualcosina e proprio ieri mi è capitato di dover utilizzare (dopo averlo cercato) questo metodo per un mio problema simile.

    Ma il bello è anche vedere quanti "approcci" ci sono per risolvere lo stesso problema



  • di Marius44 data: 28/09/2015 23:39:49

    @scossa
    Ritieniti punito!
    Fra l'altro il suggerimento di cromagno (ma anche il mio) non necessita di DUE TextBox.
    Io, invece, ho imparato il Cancel=True al quale non avevo affatto pensato.

    Ciao,
    Mario



  • di alfrimpa data: 29/09/2015 10:36:26

    Ringrazio tutti per gli interventi.

    Anch'io non avevo considerato Cancel = True ma era una di quelle (perdonatemi il termine) "cagate" cui non si pensa mai

    Alfredo





  • di scossa data: 29/09/2015 13:04:14

    Giusto per .....

    Il comportamento lamentato da Alfredo nel primo post, se ci si pensa bene, è normale: quando il codice di evento TextBox1_Exit viene eseguito, il focus è ancora sulla Textbox1 e solo al termine delle istruzioni passa alla Textbox2 (a meno di non impostare Cancel a True) scatenando l'evento TextBox2_Enter.



    scossa's web site
    Se tu hai una mela, ed io ho una mela, e ce le scambiamo, allora tu ed io abbiamo sempre una mela per uno. Ma se tu hai un'idea, ed io ho un'idea, e ce le scambiamo, allora abbiamo entrambi due idee. (George Bernard Shaw)