Tasto Invio su Button

di il
6 risposte

Tasto Invio su Button

Salve a tutti,
ho un problema con l'intercettare il tasto invio premuto quando è selezionato un pulsante sul form.
Mi spiego meglio.
In una forma ho alcuni controlli fissi e altri che vengono inseriti da codice in base ai risultati di una query sul DB.
I controlli aggiunti sono label e button, ogni record del DB corrisponde ad una label e ad un pulsante.
Per aggiungere da codice utilizzo 2 array, uno di tipo label ed uno di tipo button.

Se faccio click su uno dei pulsanti aggiunti non c'è problema e tutto funziona regolarmente perchè ad ogni pulsante ho associato un handler con indicata la sub che gestisce l'evento con questo codice:
AddHandler btSelRighe(i).Click, AddressOf GestioneRigaSelezionata

Se però anzichè cliccare con il mouse mi sposto con il tabulatore nella form ed una volta posizionatomi sul pulsante che mi interessa premo "Invio" per gestire l'evento mi va in errore.
Oltre ad aggiungere l'Handler per l'evento click ho aggiunto l'handler anche per l'evento .keypress
AddHandler btSelRighe(i).KeyPress, AddressOf Gest2

Gest2 che è la sub che dovrebbe gestire l'evento keypress riceve
sender As Object, e As KeyPressEventArgs

Quando premo invio mi da il seguente messaggio d'errore
System.InvalidCastException: 'Impossibile eseguire il cast di oggetti di tipo 'System.EventArgs' sul tipo 'System.Windows.Forms.MouseEventArgs'.'

Qualcuno sa come posso risolvere questo problema?

Grazie.

Alberto

6 Risposte

  • Re: Tasto Invio su Button

    Prova a postare il codice ,usa il tag code
  • Re: Tasto Invio su Button

    Ecco l'estratto del codice
    
    Public Class frmAvanLav
        Dim x, y, i, i2 As Integer
        Dim Carattere As Char
        Dim RigheComm(100) As Label
        Dim btSelRighe(100) As Button
    
        Private Sub frmAvanLav_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    		Carattere = ChrW(Keys.Enter)
            txtbNrComm.Select()
        End Sub
    	
    	Private Sub btConfComm_Click(sender As Object, e As EventArgs) Handles btConfComm.Click
            Dim sql_SthRComm As String
            Dim cn_SthRComm As OleDbConnection 
            Dim cmd_SthRComm As OleDbCommand = New OleDbCommand(sql_SthRComm, cn_SthRComm)
            Dim SqlDR_SthRComm As OleDbDataReader
    
            Try
                i = 0
                x = 150
                y = 10
                cn_SthRComm.Open()
                SqlDR_SthRComm = cmd_SthRComm.ExecuteReader
    
                Do While SqlDR_SthRComm.Read
    
                    MAGE = SqlDR_SthRComm.GetValue(15)
                    SSCO = SqlDR_SthRComm.GetValue(16)
                    AACO = SqlDR_SthRComm.GetValue(17)
                  
                    CodCol = SqlDR_SthRComm.GetValue(30)
                    DescrColore(CodCol, DSCol)
                    
                    RigheComm(i) = New Label
                    RigheComm(i).Name = String.Format("txtbRiga{0}", i)
                    RigheComm(i).Width = 200
                    RigheComm(i).Height = 30
                    Me.Controls.Add(RigheComm(i))
                    btSelRighe(i) = New Button
                    btSelRighe(i).Name = String.Format("btRiga{0}", i)
                    btSelRighe(i).Width = 80
                    btSelRighe(i).Height = 20
                    btSelRighe(i).Text = "Selezione"
                    Me.Controls.Add(btSelRighe(i))
    
                  [b]  AddHandler btSelRighe(i).Click, AddressOf GestioneRigaSelezionata
                    AddHandler btSelRighe(i).KeyPress, AddressOf Gest2[/b]
                 
                Loop
    
            Catch ex As Exception
                MessageBox.Show("Errore Lettura Dati  - Cod.Err.STHERBQ" & vbCrLf & ex.ToString, "DATA_READER Error", MessageBoxButtons.OK, MessageBoxIcon.Error)
            Finally
                SqlDR_SthRComm.Close()
                cn_SthRComm.Close()
            End Try
        End Sub
    	
        Private Sub [b]GestioneRigaSelezionata[/b](ByVal sender As Object, ByVal e As MouseEventArgs)
            Dim NrRiga, RigaComm As String
            Dim lStr, NRig As Integer
            NrRiga = sender.name
            lStr = NrRiga.Length
            'gestione caricamento fasi lavorazione
            NRig = CInt(NrRiga)
            RigaComm = RigheComm(NRig).Text
            GestLavorazioni(RigaComm, NC)
    
            MessageBox.Show("e.ToString" & vbCrLf & sender.name & vbCrLf & sender.ToString & NrRiga & vbCrLf & RigheComm(NrRiga).Text)
        End Sub
    	
       [b] Private Sub Gest2(sender As Object, e As KeyPressEventArgs)
            MessageBox.Show("pippo")
        End Sub[/b]
    	
    End Class
    
  • Re: Tasto Invio su Button

    Il metodo di gestione dell'evento non ha una firma compatibile con l'evento stesso.

    Tu stai facendo questa assegnazione:
    AddHandler btSelRighe(i).Click, AddressOf GestioneRigaSelezionata
    quindi il tuo metodo GestioneRigaSelezionata() dovrebbe gestire l'evento Click.

    L'evento Click passa come parametro un oggetto EventArgs, mentre il metodo vuole come parametro un MouseEventArgs:
    Private Sub GestioneRigaSelezionata (ByVal sender As Object, ByVal e As MouseEventArgs)
    Devi modificare il tipo di dato per accettare un più generico EventArgs, altrimenti è ovvio che non è possibile passare come parametro un oggetto che appartiene a una classe più generica di quella più specifica richiesta dal metodo.

    Ciao!
  • Re: Tasto Invio su Button

    Buongiorno,
    grazie mille per il tuo interesse Alka.
    Il mio problema non è sull'assegnazione e relativa gestione dell'evento click
    
    AddHandler btSelRighe(i).Click, AddressOf GestioneRigaSelezionata
    
    ma sull'assegnazione immediatamente dopo
    
      AddHandler btSelRighe(i).KeyPress, AddressOf Gest2
    
    questo dovrebbe gestire l'evento KeyPress con la sub Gest2 che è la seguente
    
    Private Sub Gest2(sender As Object, e As KeyPressEventArgs)
            MessageBox.Show("pippo")
        End Sub
    


    e quando premo invio su un tasto selezionato mi va in errore.
    Spero di essere stato abbastanza chiaro.

    Grazie ancora.

    Alberto
  • Re: Tasto Invio su Button

    Alberto75 ha scritto:


    Il mio problema non è sull'assegnazione e relativa gestione dell'evento click
    Quell'assegnazione è senz'altro un problema, fuor da qualsiasi dubbio, perché è sbagliata e rimarrà tale fino a quando non sarà corretta, per i motivi che ti ho detto nella risposta precedente.

    Inoltre, hai detto che il messaggio di errore è questo:
    System.InvalidCastException: 'Impossibile eseguire il cast di oggetti di tipo 'System.EventArgs' sul tipo 'System.Windows.Forms.MouseEventArgs'.'
    e si tratta esattamente della problematica che ti ho evidenziato io.
    e quando premo invio su un tasto selezionato mi va in errore.
    Spero di essere stato abbastanza chiaro.
    Tralascia (momentaneamente) la questione del tasto INVIO: in un modo o nell'altro, quell'evento Click sta dando dei problemi e devono essere risolti prima di passare oltre.

    Spero di essere stato chiaro anche io.

    Ciao!
  • Re: Tasto Invio su Button

    Alka....grazie, grazie e ancora grazie.
    Inutile dire che avevi ragione tu.
    Modificando come hai etto tu di mettere
    
    Private Sub GestioneRigaSelezionata(ByVal sender As Object, ByVal e As EventArgs)
    
    e non
    
    Private Sub GestioneRigaSelezionata(ByVal sender As Object, ByVal e As MouseEventArgs)
    
    ho risolto ..ed anche meglio di come avevo previsto.
    Ora il click sul pulsante o la selezione+invio sul pulsante vengono gestiti entrambi dalla stessa sub quindi non ho più bisogno di avere 2 gestioni distinte(una per il click ed una per l'invio).

    Grazie infinite.

    Alberto
Devi accedere o registrarti per scrivere nel forum
6 risposte