+ Rispondi al Thread
Visualizzazione dei risultati da 1 a 5 su 5

Discussione: Datagridview Keypress

  1. #1
    Alberto Rocca non è in linea Novello
    Post
    5

    Question Datagridview Keypress

    Utilizzo Visual studio 2005 e non capisco come si fa a fare partire l'evento keypress del datagridview, devo processare i tasti premuti dentro alle varie celle, riesco solamente ad intercettare l'evento keypress del form ma non quello della datagridview.
    Come si fa?

  2. #2
    L'avatar di alextyx
    alextyx non è in linea Moderatore Globale
    Luogo
    Prato
    Post
    2,600
    Guarda, proprio per il dubbio che mi hai insinuato, ho preso un progetto qualunque, ci ho buttato sopra un datagridview, senza toccare niente delle sue impostazioni di default, ho avviato il progetto, ci ho cliccato e l'evento, nel quale avevo messo una riga di codice, mi si è scatenato regolarmente!
    Questo è il codice usato:

    codice:
     
    Private Sub DataGridView1_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles DataGridView1.KeyPress
    MessageBox.Show("Eccoci")
    End Sub
    Insomma, secondo me non ci sono problemi. Bisogna che tu riesca a farmi capire meglio dove e come ti saltano fuori.

  3. #3
    Alberto Rocca non è in linea Novello
    Post
    5
    Se inserisco il datagridview nel form (quindi senza colonne e righe e non associato a nessuna fonte dati) l'evento keypress si scatena, il discorso cambia quando il controllo è associato ad una fonte entro dentro la cella per scrivere e l'evento non parte.

  4. #4
    L'avatar di alextyx
    alextyx non è in linea Moderatore Globale
    Luogo
    Prato
    Post
    2,600
    In effetti l'affare si complica. Probabilmente perchè il keypress non è più considerato sul datagridview, ma sugli oggetti cella, che non espongono tale evento. Può darsi ci sia una via meno cervellotica, tuttavia ho provato questa soluzione e forse potrebbe anche funzionare, ma va testato ed eventualmente corretto:

    Definisci due interi a livello di Form

    codice:
     
    Dim Riga As Integer = -1
    Dim Colonna As Integer = -1
    Si memorizzano riga e colonna della cella che ottiene il focus

    codice:
     
    Private Sub TabAssiemiDescrizioneDataGridView_CellEnter(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles TabAssiemiDescrizioneDataGridView.CellEnter
    Riga = e.RowIndex
    Colonna = e.
    ColumnIndex
    End Sub
    Quando una cella perde il focus, si 'resettano' i valori di riga e colonna

    codice:
     
    Private Sub TabAssiemiDescrizioneDataGridView_CellLeave(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles TabAssiemiDescrizioneDataGridView.CellLeave
    Riga = -1
    Colonna = -1
    End Sub
    Si intercetta la keypress del form, avendo la possibilità di capire se siamo su una cella ed eventualmente su quale, del datagridview

    codice:
     
    Private Sub Form1_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles Me.KeyPress
    If Riga >= 0 AndAlso Colonna >= 0 Then
    MessageBox.Show("Riga " & Riga.ToString & " Colonna " & Colonna.ToString)
    End If
    End Sub
    Detto ciò, ammesso che funzioni, o che possa funzionare con qualche trucco in più (non mi fido degli eventi focus, comunque!), probabilmente quello che ti serve dovresti poterlo ottenere in maniera diversa. Se non hanno esposto l'evento, presumo sia perchè è assai improbabile che serva ricorrerci.
    Comunque sono disposto a ricredermi e naturalmente a imparare vie migliori di quella che ho, a grandi linee, ipotizzato.

  5. #5
    Alberto Rocca non è in linea Novello
    Post
    5

    Talking

    Con l'esempio che mi hai mandato sembra funzionare correttamente, il mio problema l'ho risolto, però non credo di essere l'unico che utilizza quell'evento per processare i caratteri premuti dentro ad una cella della grid, io voglio informare l'utente mentre digita un codice dentro alla cella, il codice del prodotto è composto sempre da 4 numeri seguiti da 4 lettere nel formato nnnncccc, pertanto è più bello informalo mentre digita che processare la stringa dopo.
    Comunque grazie per il trucchetto perchè funziona.

+ Rispondi al Thread

Discussioni simili

  1. Associazione TextBox con DataGridView
    Da nioMatrix nel forum Visual Basic .Net
    Risposte: 1
    Ultimo Post: 27-06-2006, 08:08
  2. Da datagridview a excel
    Da nightingales nel forum Visual Basic .Net
    Risposte: 1
    Ultimo Post: 25-05-2006, 13:14

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi