Eventi Datagrid

mercoledì 08 febbraio 2012 - 17.15
Tag Elenco Tags  C#  |  .NET 3.5

marco.morgia Profilo | Junior Member

Buonasera a tutti,

ho un piccolo problema. Ho un datagrid e vorrei intercettare gli eventi KeyDown e KeyPress quando clicco all'interno della cella del mio datagrid.
Nonostante gli eventi siano correttamente istanziati, quando scrivo all'interno della cella del mio datageid non mi lancia l'evento

Jeremy Profilo | Guru

Ciao
Gli eventi KeyDown e KeyPress sono riferiti al controllo DataGridView e non alle singole celle.
se spieghi un pò più nel dettaglio cosa vuoi fare .... possiamo provare a trovare una soluzione alternativa.

Facci sapere...
Ciao

marco.morgia Profilo | Junior Member

Intanto grazie per la risposta.

Allora io ho un datagrid che ha una cella che deve accettare solo valori numerici. Siccome vorrei che l'utente sia del tutto impossibilitato a inserire un carattere non numerico vorrei utilizzare i controlli KeyPress e KeyDown per far inserire solo caratteri numerici.

Il cellvalidating mi permette di inserire sia numeri che lettere, perchè la validazione la fa quando la cella perde il focus

Jeremy Profilo | Guru

Ciao
Ho trovato questo metodo alternativo
Consiste nel creare una controllo DataGridView personalizzato con all'interno scritto questo
Public Class Class1 : Inherits DataGridView Protected Overrides Function ProcessDialogKey(keyData As Keys) As Boolean Dim key As Keys = (keyData And Keys.KeyCode) If key = Keys.A Then Return Me.ProcessRightKey(keyData) End If Return MyBase.ProcessDialogKey(keyData) End Function End Class
Nell'esempio che ho testato io, dovrebbe esserti impossibile digitare la lettera "A" all'interno di una qualsiasi cella della griglia.
Prova ad adattarlo alle tue esidenze e, se hai bisogno, facci sapere...
Ciao

marco.morgia Profilo | Junior Member

Ciao e grazie per la risposta.

Solo un ultima cosa, come faccio a richiamare la classe da un evento del dataGrid?

Jeremy Profilo | Guru

Ciao
La classe è' il DataGridView.
Se aggiungi la mia classe al tuo progetto e ricompili tutto, ti troverai nella toolbox un nuovo controllo chiamato class1.
Basterà inserirlo nel tuo form per avere la tua DataGridView personalizzata con la nuova funzionalità che ti ricordo dovrai adattare alle tue esigenze.

Facci sapere...
Ciao

marco.morgia Profilo | Junior Member

Grazie,

perfetto funziona tutto correttamente.


Grazie ancora

Jeremy Profilo | Guru

Potresti anche modificarla così e gestire l'evento direttamente nel form
Public Class Class1 : Inherits DataGridView Public Event MyKeyDown(e As Keys) Protected Overrides Function ProcessDialogKey(keyData As Keys) As Boolean RaiseEvent MyKeyDown(keyData) Return MyBase.ProcessDialogKey(keyData) End Function End Class

Jeremy Profilo | Guru

O meglio ancora .....
Public Class Class1 : Inherits DataGridView Public Event MyKeyDown(e As MyEventArgs) Protected Overrides Function ProcessDialogKey(keyData As Keys) As Boolean Dim e As New MyEventArgs e.Key = keyData RaiseEvent MyKeyDown(e) If e.Cancel Then Return MyBase.ProcessRightKey(keyData) Else Return MyBase.ProcessDialogKey(keyData) End If End Function End Class Public Class MyEventArgs Public Property Key As Keys Public Property Cancel As Boolean End Class
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-2017
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5