Creative Commons BY-NC-ND 2.5Questo sito e tutto il suo contenuto sono distribuiti sotto la licenza Creative Commons Attribuzione - Non Commerciale - Non opere derivate 2.5 Italia e con le condizioni d'uso definite nel disclaimer: siete pregati di leggere entrambi questi documenti prima di usufruire dei contenuti di questo sito. Per alcuni contenuti è necessaria una registrazione gratuita: non è necessario pagare e non è necessario accumulare punteggi per accedere agli articoli e scaricare i sorgenti. Basta solo essere onesti. Se volete che questo sito continui a rimanere attivo, a contribuire ogni giorno alla diffusione della cultura libera, non copiate il materiale per ripubblicarlo in altri luoghi : chi fa questo è solo un miserabile e un perdente. Se volete partecipare su settorezero e rendere le vostre idee, i vostri progetti, fruibili da tutti senza limitazioni, come dovrebbe essere in un paese civile e acculturato, potete farlo tranquillamente.

VB.NET : Gestire l’evento di pressione dei tasti nelle celle di una DataGridView- Un “CellKeyPress” fatto in casa

Autore: Giovanni Bernardo | Data pubblicazione: 2 giugno 2009
Categorie: VB.NET

Lavorando sulle DataGridView, i più attenti si saranno accorti che tale componente, pur avendo una quantità interminabile di eventi, manca di un evento di tipo “CellKeyPress”, ovvero il gestore di evento relativo alla pressione dei tasti su di una cella.

Tale evento probabilmente non sarà stato inserito dal momento che le celle in una DataGridView possono essere di vari tipi (textbox, checkbox, combobox ecc) e sarebbe stato complicato gestire tale evento per vari tipi di celle. Fortunatamente a tale mancanza si può sopperire creando un gestore d’evento ad-hoc con un paio di procedure.

Supponiamo che la nostra DataGridView si chiami DataGridView1, innanzitutto nell’evento Load del Form definiamo il nostro nuovo gestore d’evento:

AddHandler DataGridView1.EditingControlShowing, AddressOf DataGridView1_EditingControlShowing

In pratica “dirottiamo” il normale gestore d’evento EditingControlShowing, che si verifica quando viene visualizzato un controllo per la modifica di una cella, su una nostra procedura personalizzata, che abbiamo chiamato DataGridView1_EditingControlShowing.

Definiamo quindi la nostra procedura personalizzata:

Private Sub DataGridView1_EditingControlShowing(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewEditingControlShowingEventArgs)
     ' Trasformo il controllo che ha scatenato l'evento in una textbox
     Dim txtbox As TextBox = CType(e.Control, TextBox)
 
     ' Se c'è un controllo, aggiungo un gestore d'evento
     If Not (txtbox Is Nothing) Then
          AddHandler txtbox.KeyPress, AddressOf txtbox_KeyPress
     End If
End Sub

In questa procedura stiamo intercettando un evento di modifica, dopodichè “convertiamo” il controllo (e.Control) che ha scatenato l’evento in una TextBox, dichiarata tale TextBox, aggiungiamo un gestore d’evento per essa. Il gestore d’evento appena creato, può essere quindi utile per intercettare l’evento KeyPress in una cella di una DataGridView:

Private Sub txtbox_KeyPress(ByVal sender As System.Object, ByVal e As System.Windows.Forms.KeyPressEventArgs)
     ' Questa sub viene richiamata alla pressione di un tasto in una cella
     ' della nostra datagridview1
     MessageBox.Show(e.KeyChar.ToString())
End Sub

Il valore e in questa sub contiene tutte le proprietà dell’evento KeyPress, la proprietà KeyChar contiene il tasto premuto, e lo si può utilizzare ad esempio per fare in modo che un utente non possa digitare determinati caratteri in una cella, sfruttando le routine già illustrate in un precedente articolo. Quando dichiariamo la textbox nella sub DataGridView1_EditingControlShowing, possiamo addirittura impostarne la proprietà MaxLength in maniera tale che l’utente non possa digitare più di un determinato numero di caratteri nella cella della DataGridView. E’ ovvio che con un codice fatto in questa maniera è possibile sfruttare tutti i normali eventi di una textbox per poterli utilizzare con le celle di una DataGridView.

Articoli che potrebbero interessarti

L'articolo ti è piaciuto o ti è stato utile per risolvere un problema? Supporta e mantieni in vita questo sito, ci basta soltanto un caffè o una birra.
Se desiderate che settorezero continui a rimanere gratuito e fruibile da tutti, non copiate il nostro materiale e segnalateci se qualcuno lo fa

Puoi lasciare un commento, o un trackback dal tuo sito.

  1. Ancora nessun commento.

Devi essere collegato per lasciare un commento.

  1. Ancora nessun trackback
settorezero.com e il logo Zroid™ ©2007÷2012 Giovanni Bernardo - E' vietata la copia e la distribuzione anche parziale dei contenuti di questo sito web senza l'esplicito consenso dell'autore.
I contenuti di settorezero.com sono distribuiti sotto una licenza Creative Commons Attribuzione-Non Commerciale-Non Opere derivate 2.5 Italia a cui vanno aggiunte le condizioni d'uso definite nel disclaimer.
settorezero.com e tutti i suoi contenuti sono tutelati dalla legge sul diritto d'autore per cui i trasgressori sono perseguibili a norma di legge.
Creative Commons BY-NC-ND 2.5
Il tema di questo sito è basato sul tema Fusion per wordpress, realizzato originariamente da digitalnature e fa uso del plugin Wassup per il computo delle statistiche. Per contattare l'autore siete pregati di utilizzare la sezione contatti.
Per essere aggiornato con tutte le novità di settorezero.com seguici anche anche su Facebook Twitter Tumblr Blogspot Youtube.