Risolto Visual Studio 2019 V.B. applicare l'evento Key Press

dautattmaui

Utente abituale
25 Gennaio 2016
187
16
Bari
2013
2
Buongiorno a tutti, è da poco che uso Visual Studio e sono alle prese con un' applicazione che funziona con il mouse.
L'applicazione è composta di due TextBox ed un pulsante. Gradirei che il suo funzionamento sia con il pulsante "Invio" della tastiera usando l'evento KeyPress.
Ho provato senza riuscire e quindi sono a chiedere un vostro aiuto.
Per semplicità, riporto il codice solo di una TextBox che è identico alla seconda TextBox.

Visual Basic:
If TextBox1.Text = "" Then
    MsgBox("Il campo va inserito", MsgBoxStyle.Critical, "Attenzione")
          TextBox1.Focus()
          TextBox1.Text = ""
          Exit Sub
ElseIf TextBox1.Text <> "gallo" Then
    MsgBox("Il nome non corretto", MsgBoxStyle.Critical, "Attenzione")
          TextBox1.Focus()
          TextBox1.Text = ""
          Exit Sub
ElseIf TextBox1.Text = "gallo" Then
    MsgBox("il nome  è  corretto", MsgBoxStyle.Critical, "Attenzione")
          TextBox2.Focus()
          TextBox1.Text = ""
          Exit Sub
End If
In allegato ho inserito il file. Grazie anticipatamente per l'aiuto.
 

Allegati

giulianovac

Access/VBA Expert
Expert
9 Giugno 2018
2.423
83
Italy
2013 2019
178
Non posso visionare il progetto in questo momento, ma non si capisce una cosa: quel codice DOVE l'hai messo?
Spero tu non l'abbia messo nell'evento Click...

Te lo chiedo perché per inibire il 'passaggio' al controllo successivo si usa l'evento Validating e nel caso tu voglia bloccare il pasaggio si pone il parametro e.Cancel = True.
Esempio (scritto al volo quindi potrebbero esserci errori):

Visual Basic:
    Private Sub TextBox1_Validating(sender As Object, e As CancelEventArgs) Handles TextBox1.Validating
        Dim msg As String = "Non hai inserito alcun valore." & Environment.NewLine & "Desideri uscire?"
        Dim title As String = "Valore obbligatorio"
        Dim buttons As MessageBoxButtons = MessageBoxButtons.YesNo
        Dim icon As MessageBoxIcon = MessageBoxIcon.Question

        If TextBox1.Text = "" Then
            If MessageBox.Show(Me, msg, title, buttons, icon) = DialogResult.Yes Then
                Me.Close()
                Me.Dispose()
                Exit Sub
            Else
                e.Cancel = True ' mantiene il focus sul TextBox1
            End If

        End If
    End Sub

A parte questo, per passare da un controllo TextBox al successivo devi intercettare l'evento KeyDown:

Visual Basic:
    Private Sub TextBox1_KeyDown(sender As Object, e As KeyEventArgs) Handles TextBox1.KeyDown
        If e.KeyCode = Keys.Return Then
            TextBox2.Focus()
        End If
    End Sub
 

dautattmaui

Utente abituale
25 Gennaio 2016
187
16
Bari
2013
2
Grazie a tutti per la tempestività e disponibilità.
Giulianovac, per vedere il funzionamento, ho inserito l'evento CLICK, che funzionava con il mouse.
L'ho provato anche con l'evento KeyPress e KeyDown senza riuscirci, non ho provato l'evento Validating.

All'inizio ho inserito una variabile: "Dim gallo As String".

Funziona ed al momento non riesco ad inserire la condizione (If---End If):
se TextBox1 = gallo deve andare alla TextBox2.

Grazie ancora per l'aiuto.
 

giulianovac

Access/VBA Expert
Expert
9 Giugno 2018
2.423
83
Italy
2013 2019
178
dautattmaui @dautattmaui
non ho capito se hai risolto oppure no.
Se non hai risolto, mostra il codice e allega eventualmente anche il progetto modificato.
 

dautattmaui

Utente abituale
25 Gennaio 2016
187
16
Bari
2013
2
Grazie Giulianovac, funziona, gradirei inserire una condizione, se il nome inserito alla TextBox è diverso o meno:
Dim gallo As String (TextBox1)
Dim palo As String (TextBox2)

se diverso non deve proseguire.
Il resto va bene.
Grazie.



Visual Basic:
Public Class Form1

    Dim gallo As String
    Dim palo As String
    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles
Button1.Click
        Form2.Show()
        Me.Hide()
    End Sub
    Private Sub Button2_Click(sender As Object, e As EventArgs) Handles
Button2.Click
        Application.Exit()
    End Sub
    Private Sub TextBox1_Validating(sender As Object, e As
CancelEventArgs) Handles TextBox1.Validating
        Dim msg As String = "Non hai inserito alcun valore." &
Environment.NewLine & "Desideri uscire?"
        Dim nsg As String = "Valore errato." & Environment.NewLine &
"Desideri uscire?"
        Dim title As String = "Valore obbligatorio"
        Dim buttons As MessageBoxButtons = MessageBoxButtons.YesNo
        Dim icon As MessageBoxIcon = MessageBoxIcon.Question
        If TextBox1.Text = "" Or TextBox2.Text <> "gallo" Then
            If MessageBox.Show(Me, msg, title, buttons, icon) =
DialogResult.Yes Then
                Me.Close()
                Me.Dispose()
                TextBox1.Focus()
                Exit Sub
            Else
                TextBox1.Text = ""
                e.Cancel = True ' mantiene il focus sul TextBox1
            End If

        End If
    End Sub
    Private Sub TextBox1_KeyDown(sender As Object, e As KeyEventArgs)
Handles TextBox1.KeyDown
        If e.KeyCode = Keys.Return Then
            TextBox2.Focus()
        End If
    End Sub
    Private Sub TextBox2_Validating(sender As Object, e As
CancelEventArgs) Handles TextBox2.Validating
        Dim msg As String = "Non hai inserito alcun valore." &
Environment.NewLine & "Desideri uscire?"
        Dim nsg As String = "Valore errato." & Environment.NewLine &
"Desideri uscire?"
        Dim title As String = "Valore obbligatorio"
        Dim buttons As MessageBoxButtons = MessageBoxButtons.YesNo
        Dim icon As MessageBoxIcon = MessageBoxIcon.Question
        If TextBox2.Text = "" Or TextBox2.Text <> "palo" Then
            If MessageBox.Show(Me, msg, title, buttons, icon) =
DialogResult.Yes Then
                Me.Close()
                Me.Dispose()
                TextBox2.Focus()
                Exit Sub
            Else
                TextBox2.Text = ""
                e.Cancel = True ' mantiene il focus sul TextBox2
            End If

        End If
    End Sub
    Private Sub TextBox2_KeyDown(sender As Object, e As KeyEventArgs)
Handles TextBox2.KeyDown
        If e.KeyCode = Keys.Return Then
            Button1.Focus()
        End If
    End Sub
End Class
Allego il file.
 

Allegati

patel

Utente assiduo
25 Marzo 2016
1.353
38
74
Livorno
2010
1
basta inserire le condizioni desiderate prima di Button1.Focus()
Visual Basic:
    Private Sub TextBox2_KeyDown(sender As Object, e As KeyEventArgs)
Handles TextBox2.KeyDown
        If e.KeyCode = Keys.Return Then
            Button1.Focus()
        End If
    End Sub
 

giulianovac

Access/VBA Expert
Expert
9 Giugno 2018
2.423
83
Italy
2013 2019
178
Non ho modo di provare il progetto, stasera, ma c'è qualcosa che non mi torna. Tu hai scritto:

se il nome inserito alla TextBox è diverso o meno
A quale TextBox ti stai riferendo?
Devi essere più specifico.


Altra cosa, nell'evento:
Visual Basic:
Private Sub TextBox1_Validating(sender As Object, e As CancelEventArgs) Handles TextBox1.Validating
hai scritto questa istruzione:
Visual Basic:
If TextBox1.Text = "" Or TextBox2.Text <> "gallo" Then
che non ha un senso logico, perché TextBox1 NON deve mai essere vuota (almeno questo è quello che avevi stabilito tu) quindi che senso ha testare il valore in TextBox2, dato che questo sarà sempre vuoto, non avendo ancora ricevuto il focus?
 

dautattmaui

Utente abituale
25 Gennaio 2016
187
16
Bari
2013
2
Giulianovac, il progettino funziona ed il suo procedimento è identico ad entrambi TextBox.

La sua funzione consiste che, se non inserisco nulla o inserisco una voce diversa, esce un msgbox: "Non hai inserito alcuna voce/o voce errata" ed è il codice che ho modificato:
Visual Basic:
> If TextBox1.Text = "" Or TextBox1.Text <> "gallo" Then........
Se elimino:
 > Or TextBox1.Text <> "gallo" Then......
e non funziona.
Vorrei inserire una condizione che al momento non riesco a creare: > un msgbox che mi avvisa del fatto che la prima lettera alla TextBox ddovrebbe essere maiuscola.
Grazie al suggerimento di Patel, che saluto, ho inserito un msgbox "Voce corretta" che funziona.

Grazie ancora dell'aiuto e della pazienza.
 

giulianovac

Access/VBA Expert
Expert
9 Giugno 2018
2.423
83
Italy
2013 2019
178
Per il maiuscolo puoi usare

Visual Basic:
If TextBox1.Text = StrConv(TextBox1.Text, VbStrConv.ProperCase) Then
   ' l'iniziale è maiuscola
End If
 

patel

Utente assiduo
25 Marzo 2016
1.353
38
74
Livorno
2010
1
ma non conviene fare la trasformazione automaticamente con l'evento validating invece di controllare ?
 
Ultima modifica:

dautattmaui

Utente abituale
25 Gennaio 2016
187
16
Bari
2013
2
Buongiorno a tutti, il progettino funziona egregiamente ed inserisco risolto.

Visto l'ultimo intervento sia di Patel che di Giulianovac riguardo la trasformazione che potrebbe avvenire automaticamente con l'evento validatig, potreste suggerirmi dove dovrebbe essere inserito il codice ?
Visual Basic:
> TextBox1.Text = StrConv(TextBox1.Text, VbStrConv.ProperCase)
Grazie ancora ed alla prossima.
 

Sostieni ForumExcel

Aiutaci a sostenere le spese e a mantenere online la community attraverso una libera donazione!