KeyPress in DGV

lunedì 31 agosto 2009 - 09.24

sergio58 Profilo | Junior Member

In un form ho un datagridview, ho sviluppato l'evento keypress del datagridview , ma quando schiaccio il tasto enter l'evento non si scatena, e non riesco ad intercettare il tasto.

Grazie a tutti

luxsor Profilo | Guru

Ciao Sergio,
devi utilizzare l'evento KeyDown con all'interno il seguente codice:

evento keydown....

If e.KeyCode = Keys.Return Then

'il tuo codice da eseguire

End If


Fammi sapere


------------------------
Luxsor

sergio58 Profilo | Junior Member

Grazie per la risposta, io ho fatto cosi,
Private Sub DataGridView2_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles DataGridView2.KeyDown

Dim i As Integer

If e.KeyCode = Keys.Return Then
i = DataGridView2.CurrentCell.Value
End If


End Sub
ma non si attiva, clicco il tasto enter all'interno della cella, ho fatto qualche altro errore ?


Ciao sergio.

luxsor Profilo | Guru

>ma non si attiva, clicco il tasto enter all'interno della cella,
>ho fatto qualche altro errore ?

Cosa intendi per "Non si attiva"?

Hai dichiarando la variabile I come Integer, ma se nella cella è contenuto un valore diverso da un numero es Stirng, otterrai un errore di Casting.

Fammi sapere


------------------------
Luxsor

simbla79 Profilo | Junior Member

l'evento keydown lo scatena la datagridview e non la cella nella quale stai editando. se ti serve sapere il valore dopo che hai premuto invio usa l'evento CellEndEdit.

Spero di esserti stato utile.
Ciao

sergio58 Profilo | Junior Member

La cella è impostata a valore numerico, solo che quando premo il tasto enter l'evento non si scatena.

Ho messo un punto di interruzione per verificarlo , ma non si blocca.

simbla79 Profilo | Junior Member

levento key dow non è interccettato menttre editi la cella se tu premi un qualsiasi tasto , esempio freccia giu o sin o des o giù mentre hai il focus sulla datagridview allora scateni l'evento key down se sei in modalità editor, quando scrivi del testo nella cella, l'evento key down non viene scatenato.

luxsor Profilo | Guru

>La cella è impostata a valore numerico, solo che quando premo il tasto enter l'evento non si scatena.
>Ho messo un punto di interruzione per verificarlo , ma non si blocca.

Se ti posizioni in una cella del DataGridView e premi un tasto, tale tasto si può intercettato dall' evento KeyDown.

Se non riesci ad intercettarlo controlla Handler o il nome del DataGridView.

Metti il punto di interruzione sull'evento KeyDown





------------------------
Luxsor

simbla79 Profilo | Junior Member

x luxsor

io ho fatto una prova se la cella è readonly allora l'evento lo genera se invece è editabile non viene scatenato. eccetto per il return che si sposta in un altra cella.

Private Sub DataGridView1_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles DataGridView1.KeyDown

MsgBox(e.KeyCode.ToString)

End Sub

luxsor Profilo | Guru

Ciao Marco

>io ho fatto una prova se la cella è readonly allora l'evento
>lo genera se invece è editabile non viene scatenato. eccetto
>per il return che si sposta in un altra cella.

Quello che intendi tu, cioè se la cella è editabile non viene scatenato l'evento, vale solo se imposti EditMode = EditOnEnter
perchè l'Invio lo utilizza per entry della modifica della cella.

Cambia la proprietà in EditOnKeystrokeOrF2 o in un'altra e vedi.

X Sergio
non hai specificato se l'evento KeyDown deve essere una conseguenza di qualcosa....



------------------------
Luxsor

simbla79 Profilo | Junior Member

Ciao,

è già settato in quel modo, ma quello che intendo io, e presumo anche sergio, è che se sto digitando del testo all'interno della cella e premo invio esce dalla modalità di editign e l'evento keydown non gli si attiva.

CITO SERGIO
"End Sub
ma non si attiva, clicco il tasto ||||enter all'interno della cella||||, ho fatto qualche altro errore ?"


xè se no non vedo modo xè non debba funzionare

sergio58 Profilo | Junior Member

Grazie a tutti per l'interessamento, comunque , uso VB2005 e le impostazioni sono con la cella a readonly e EditMode =EditOnKeystrokeOrF2 , ma l'evento non si scatena neanche premendo un tasto qualsiasi.

Questo è il codice che già avevo postato, il nome e l'handler sono esatti perchè fanno riferimento al datagridview2.

Private Sub DataGridView2_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles DataGridView2.KeyDown
Dim i As Integer
Dim Navigazione As New CustomDataGridView
If e.KeyCode = Keys.Return Then
i = DataGridView2.CurrentCell.Value
End If
End Sub
Credo che anche se lo provi tu, ti debba dare gli stessi risultati, non penso che solo sul mio computer non funzioni.

Sergio



luxsor Profilo | Guru

>è già settato in quel modo, ma quello che intendo io, e presumo
>anche sergio, è che se sto digitando del testo all'interno della
>cella e premo invio esce dalla modalità di editign e l'evento
>keydown non gli si attiva.
Se sei in modalità Editing SI, (ma non è stato specificato)

Quindi non vengono scatenati tutti quegli eventi che genera il DataGridView.

Allora si deve usare l'evento che hai suggerito tu CellEndEdit, ma tale evento verrà scatenato indipendentemente dal tasto che premi per chiudere l'editing della cella cioè i tasti cursori.

X Sergio.
Confermi la modalità di Editing?


------------------------
Luxsor

luxsor Profilo | Guru

Allega il progetto


------------------------
Luxsor

sergio58 Profilo | Junior Member

Hai ragione, penso che il progetto sia megli di tante spiegazioni

luxsor Profilo | Guru

Non hai allegato l'intero progetto, ma solo la soluzione (manca il form).

Riallega

------------------------
Luxsor

sergio58 Profilo | Junior Member

Scusa, questo l'ho provato prima di inviarlo , dovrebbe andare bene:

luxsor Profilo | Guru

Allora Sergio,
nell'evento CellEnter (che viene generato ogni qualvolta entri in una cella del DGW),
hai utilizzato il metodo BeginEdit che comporta il passaggio dalla modalità Modifica della cella, quindi non predisposta agli eventi che vengono scatenati da DGW.

Questo metodo non serve se importi EditMode a livello di DGW.

Rimuovi tale metodo dall'evento:
' DataGridView2.BeginEdit(True)

Fammi sapere


------------------------
Luxsor

sergio58 Profilo | Junior Member

Ciao luxsor, effettivamente non mi ricordavo di aver impostato quella riga, ma nella guida di msdn ho copiato la classe che vedi nel progetto.
Tale classe dovrebbe permettere di utilizzare il tasto enter al posto del TAB anche in modalità modifica, ma non sono riuscito ad implementarlo.
Sapresti darmi qualche suggerimento ?

luxsor Profilo | Guru

Infatti,
ma se vuoi utilizzare il Invio anziche il Tab lo devi disabilitare nelle proprietà del DGV.
Questo comporta però, che l'evento KEYDOWN non verrà mai chiamato.

Se desideri questo OK.




------------------------
Luxsor

sergio58 Profilo | Junior Member

Scusa se tengo ancora aperto questo post, ho impostato tabStop=false (credo che sia questa la proprietà a cui facevi riferimento), ma il focus non và sulla cella adiacente a quella in cui ho premuto il tasto enter.

Praticamente non so come utilizzare la classe.

Grazie per la pazienza.

Sergio

luxsor Profilo | Guru

Purtroppo non c'è una funzione che ti permette di fare questo (almeno che io sappia).
Te lo devi gestire tramite codice dalla posizione della riga e colonna



------------------------
Luxsor
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2013
Running on Windows Server 2008 R2 Enterprise, SQL Server 2008 & ASP.NET 3.5