Visualizzazione dei risultati da 1 a 4 su 4
  1. #1
    Utente di HTML.it L'avatar di cassano
    Registrato dal
    Aug 2004
    Messaggi
    3,002

    Windows Form & Datagrid modifica cella

    Buongiorno,
    ho una Datagrid e vorrei controllare l'inserimento di ogni singolo valore in una cella.
    Praticamente durante la modifica di una cella, vorrei far inserire solo caratteri numerici e virgole.

    Non riesco a trovare l'evento che mi potrebbe aiutare.

  2. #2
    Moderatore di CMS L'avatar di kalosjo
    Registrato dal
    Jul 2001
    residenza
    In culo alla luna
    Messaggi
    1,999
    Tra keydown e keypress risolvi (con vb6 bastava keypress)

    Cercando su google ho trovato il metodo più funzionale, almeno così mi pare

    codice:
     
    Private nonNumberEntered As Boolean = False
    
    Private Sub TxtNumDoc_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles TxtNumDoc.KeyDown, TxtNumDocP.KeyDown, TxtNumDocA.KeyDown
            nonNumberEntered = False
    
            ' Determine whether the keystroke is a number from the top of the keyboard.
            If e.KeyCode < Keys.D0 OrElse e.KeyCode > Keys.D9 Then
                ' Determine whether the keystroke is a number from the keypad.
                If e.KeyCode < Keys.NumPad0 OrElse e.KeyCode > Keys.NumPad9 Then
                    ' Determine whether the keystroke is a backspace.
                    If e.KeyCode <> Keys.Back Then
                        ' A non-numerical keystroke was pressed. 
                        ' Set the flag to true and evaluate in KeyPress event.
                        nonNumberEntered = True
                    End If
                End If
            End If
            'If shift key was pressed, it's not a number.
            If Control.ModifierKeys = Keys.Shift Then
                nonNumberEntered = True
            End If
    End Sub
    
    
    Private Sub TxtNumDoc_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles TxtNumDoc.KeyPress, TxtNumDocP.KeyPress, TxtNumDocA.KeyPress
    
            If nonNumberEntered Then
                ' Stop the character from being entered into the control since it is non-numerical.
                e.Handled = True
            End If
    
    End Sub
    Tradotto: nel keydown controlli se è stato premuto un numero
    Nel keypress annulli l'evento se non è un numero

    Fatto su un campo di testo chiamato TxtNumDoc (a me serviva così) riportalo sulla datagrd nel caso in cui la cella è quella che ti interessa.
    Scusate i puntini di sospensione...... La verità è che non ho argomenti....

  3. #3
    Utente di HTML.it L'avatar di cassano
    Registrato dal
    Aug 2004
    Messaggi
    3,002
    A questo punto credo si possa fare tutto sul primo evento :

    TxtNumDoc_KeyDown

  4. #4
    Utente di HTML.it L'avatar di Vinsent
    Registrato dal
    May 2011
    Messaggi
    314
    Io ho creato una soluzione basata su un "controllo utente" dove basta impostare la colonna e i tasti accettati dalle rispettive celle tramite le "proprietà" del controllo, esempio:
    codice:
    Public Class dgv_modificato
        Inherits System.Windows.Forms.DataGridView
        Dim colonna As Integer
        Dim lista_tasti As New List(Of Keys)
        Dim colonna_controllata As Integer
        Sub New()
            'tasti da 0 a 9
            lista_tasti.Add(Keys.D0)
            'eccetera
            'tasti del tastierino da 0 a 9
            lista_tasti.Add(Keys.NumPad0)
            'eccetera
            'varie
            lista_tasti.Add(Keys.Delete)    'CANC
            lista_tasti.Add(Keys.Back)      'DELETE
            lista_tasti.Add(Keys.Oemcomma)  'VIRGOLA (188)
            lista_tasti.Add(Keys.OemPeriod) 'PUNTO (190)
            lista_tasti.Add(Keys.Decimal)   'PUNTO TASTIERINO(110)
            lista_tasti.Add(Keys.Left)      'FRECCIA SINISTRA
            lista_tasti.Add(Keys.Right)     'FRECCIA DESTRA
            lista_tasti.Add(131139)         'CONTROL C (COPIA)
            lista_tasti.Add(131158)         'CONTROL V (INCOLLA)
            lista_tasti.Add(131162)         'CONTROL Z (TAGLIA)
        End Sub
        'da impostare nel form
        'è il numero di colonna sulla quale effettuare
        'il controllo
        Public Property ColonnaControllata As Integer
            Get
                Return colonna_controllata
            End Get
            Set(value As Integer)
                colonna_controllata = value
            End Set
        End Property
        'in "Sub New" vengono preimpostati una serie di tasti
        Public Property ListaTasti As List(Of Keys)
            Get
                Return lista_tasti
            End Get
            Set(value As List(Of Keys))
                lista_tasti = value
            End Set
        End Property
        Protected Overrides Function ProcessCmdKey(ByRef msg As System.Windows.Forms.Message, ByVal keyData As System.Windows.Forms.Keys) As Boolean
            '*************************************************************************
            'DA COMMENTARE IN RELEASE
            'questo:
            Console.WriteLine(keyData & " " & keyData.ToString)
            'in fase di debug scrive nell'output le informazioni sul tasto premuto,
            'serve per identificare il valore "keydata" da inserire nella lista.
            '*************************************************************************
            If colonna_controllata = colonna Then
                If lista_tasti.Contains(keyData) = False Then
                    msg = Nothing
                End If
            End If
            Return MyBase.ProcessCmdKey(msg, keyData)
        End Function
        'al doppio clic su una cella riporta la colonna
        Private Sub ME_CellBeginEdit(ByVal sender As Object, ByVal e As DataGridViewCellCancelEventArgs) Handles Me.CellBeginEdit
            colonna = e.ColumnIndex
        End Sub
    End Class
    Vedete voi se può esservi utile...
    ciao

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.