none
Ayuda con la siguiente estrucutrar personalizada de Masktextbox RRS feed

  • Pregunta

  • Buenas, tengo el siguiente condigo, pero al momento de incorporarlo en un DatagridView, cada vez que escribo y paso a otra celda se borra la informacion y no queda guardada.

    '******************************************************
    '******************************************************
    '******************************************************
    Public Class DataGridViewMaskedTextBox
    
        Public Class DataGridViewMaskedTextBoxColumn
    
            Inherits DataGridViewColumn
    
            Private maskValue As String = ""
    
            Public Sub New()
    
                MyBase.New(New DataGridViewMaskedTextBoxCell())
    
            End Sub
    
            Public Property Mask() As String
    
                Get
    
                    Return Me.maskValue
    
                End Get
    
                Set(ByVal value As String)
    
                    Me.maskValue = value
    
                End Set
    
            End Property
    
            Public Overrides Function Clone() As Object
    
                Dim col As DataGridViewMaskedTextBoxColumn = CType(MyBase.Clone(), DataGridViewMaskedTextBoxColumn)
    
                col.Mask = Me.Mask
    
                Return col
    
            End Function
    
            Public Overrides Property CellTemplate() As DataGridViewCell
    
                Get
    
                    Return MyBase.CellTemplate
    
                End Get
    
                Set(ByVal value As DataGridViewCell)
    
                    If Not TypeOf value Is DataGridViewMaskedTextBoxCell Then
    
                        Throw New InvalidCastException("DataGridViewMaskedTextBoxCell")
    
                    End If
    
                    MyBase.CellTemplate = value
    
                End Set
    
            End Property
    
        End Class
    
    
    
        Public Class DataGridViewMaskedTextBoxCell
            Inherits DataGridViewTextBoxCell
    
            Public Sub New()
    
            End Sub
    
            Public Overrides Sub InitializeEditingControl(ByVal rowIndex As Integer, ByVal initialFormattedValue As Object, ByVal dataGridViewCellStyle As DataGridViewCellStyle)
                MyBase.InitializeEditingControl(rowIndex, initialFormattedValue, dataGridViewCellStyle)
    
                Dim maskedBox As TCalendarEditingControl = CType(Me.DataGridView.EditingControl, TCalendarEditingControl)
    
                If Not (maskedBox Is Nothing) Then
    
                    ' maskedBox.Text = CStr(IIf(Me.Value Is Nothing, "",
                    Me.Value.ToString()
    
                    Dim column As DataGridViewMaskedTextBoxColumn = CType(Me.OwningColumn, DataGridViewMaskedTextBoxColumn)
    
                    If Not (column Is Nothing) Then
    
                        maskedBox.Mask = column.Mask
    
                    End If
    
                End If
    
            End Sub
    
    
            Public Overrides ReadOnly Property EditType() As Type
    
                Get
    
                    Return GetType(TCalendarEditingControl)
    
                End Get
    
            End Property
    
            Public Overrides ReadOnly Property ValueType() As Type
    
                Get
    
                    Return GetType(Object)
    
                End Get
    
            End Property
    
            Public Overrides ReadOnly Property DefaultNewRowValue() As Object
    
                Get
    
                    Return MyBase.DefaultNewRowValue
    
                End Get
    
            End Property
    
        End Class
        Public Class TCalendarEditingControl
            Inherits MaskedTextBox 'DateTimePicker
            Implements IDataGridViewEditingControl
    
            Private dataGridViewControl As DataGridView
            Private valueIsChanged As Boolean = False
            Private rowIndexNum As Integer
    
            Public Sub New()
                Me.Mask = MaskFormat.IncludeLiterals
                ' Me.CustomFormat = "dd/MM/yy"
            End Sub
    
            Public Property EditingControlFormattedValue() As Object Implements IDataGridViewEditingControl.EditingControlFormattedValue
    
                Get
                    Return Me.Text
                End Get
    
                Set(ByVal value As Object)
                    If TypeOf value Is String Then
                        Me.Text = DateTime.Parse(CStr(value))
                    End If
                End Set
    
            End Property
    
            Public Function GetEditingControlFormattedValue(ByVal context As DataGridViewDataErrorContexts) As Object Implements IDataGridViewEditingControl.GetEditingControlFormattedValue
    
                Me.Mask = "##/##/####"
                Return Me.Text
            End Function
    
            Public Sub ApplyCellStyleToEditingControl(ByVal DataGridViewCellStyle As DataGridViewCellStyle) Implements IDataGridViewEditingControl.ApplyCellStyleToEditingControl
    
                Me.Font = DataGridViewCellStyle.Font
                Me.ForeColor = DataGridViewCellStyle.ForeColor
                Me.BackColor = DataGridViewCellStyle.BackColor
    
            End Sub
    
            Public Property EditingControlRowIndex() As Integer _
    Implements IDataGridViewEditingControl.EditingControlRowIndex
    
                Get
                    Return rowIndexNum
                End Get
                Set(ByVal value As Integer)
                    rowIndexNum = value
                End Set
    
            End Property
    
            Public Function EditingControlWantsInputKey(ByVal key As Keys, ByVal dataGridViewWantsInputKey As Boolean) As Boolean Implements IDataGridViewEditingControl.EditingControlWantsInputKey
    
                ' Let the DateTimePicker handle the keys listed.
                Select Case key And Keys.KeyCode
                    Case Keys.Left, Keys.Up, Keys.Down, Keys.Right, Keys.Home, Keys.End, Keys.PageDown, Keys.PageUp
    
                        Return True
    
                    Case Else
                        Return False
                End Select
    
            End Function
    
            Public Sub PrepareEditingControlForEdit(ByVal selectAll As Boolean) Implements IDataGridViewEditingControl.PrepareEditingControlForEdit
    
                ' No preparation needs to be done.
    
            End Sub
    
            Public ReadOnly Property RepositionEditingControlOnValueChange() As Boolean Implements IDataGridViewEditingControl.RepositionEditingControlOnValueChange
    
                Get
                    Return False
                End Get
    
            End Property
    
            Public Property EditingControlDataGridView() As DataGridView Implements IDataGridViewEditingControl.EditingControlDataGridView
    
                Get
                    Return dataGridViewControl
                End Get
                Set(ByVal value As DataGridView)
                    dataGridViewControl = value
                End Set
    
            End Property
    
            Public Property EditingControlValueChanged() As Boolean Implements IDataGridViewEditingControl.EditingControlValueChanged
    
                Get
                    Return valueIsChanged
                End Get
                Set(ByVal value As Boolean)
                    valueIsChanged = value
                End Set
    
            End Property
    
            Public ReadOnly Property EditingControlCursor() As Cursor Implements IDataGridViewEditingControl.EditingPanelCursor
    
                Get
                    Return MyBase.Cursor
                End Get
    
            End Property
    
        End Class

    jueves, 29 de noviembre de 2018 13:18

Respuestas

  • La mejor forma de crear un masktextbox dentro de un Datagridview es con el siguiente codigo:

    Public Class DataGridViewMaskedTextBoxColumn
        Inherits DataGridViewColumn
    
        'CellTemplate y especifique el objeto DataGridViewMaskedTextBoxCell
        'Llamar al constructor de la clase base
        Public Sub New()
            MyBase.New(New DataGridViewMaskedTextBoxCell())
        End Sub
    
        Private maskValue As String = ""
        ''' <summary>
        ''' Valor para aplicar a la propiedad de máscara de MaskedTextBox
        ''' </summary>
        Public Property Mask() As String
            Get
                Return Me.maskValue
            End Get
            Set(ByVal value As String)
                Me.maskValue = value
            End Set
        End Property
    
        'Porque hemos añadido nuevas propiedades,
        'Hay una necesidad de reemplazar el 'método Clone
        Public Overrides Function Clone() As Object
            Dim col As DataGridViewMaskedTextBoxColumn =
                DirectCast(MyBase.Clone(), DataGridViewMaskedTextBoxColumn)
            col.Mask = Me.Mask
            Return col
        End Function
    
        'Obteniendo y configurando CellTemplate
        Public Overrides Property CellTemplate() As DataGridViewCell
            Get
                Return MyBase.CellTemplate
            End Get
            Set(ByVal value As DataGridViewCell)
                'DataGridViewMaskedTextBoxCell solamente
                'No se puede establecer en CellTemplate
                If Not (TypeOf value Is DataGridViewMaskedTextBoxCell) Then
                    Throw New InvalidCastException(
                        "DataGridViewMaskedTextBoxCell mascara no indicada" &
                        "Especificar el tipo")
                End If
                MyBase.CellTemplate = value
            End Set
        End Property
    End Class
    
    '''<summary>
    '''Información de texto que se puede editar con MaskedTextBox
    '''Mostrar en el control DataGridView.
    ''' </summary>
    Public Class DataGridViewMaskedTextBoxCell
        Inherits DataGridViewTextBoxCell
    
    
        Public Sub New()
        End Sub
    
        'Inicializar control de edición
        'Dado que el control de edición también es usado por otra celda o columna, la inicialización es necesaria
        Public Overrides Sub InitializeEditingControl(ByVal rowIndex As Integer,
            ByVal initialFormattedValue As Object,
            ByVal dataGridViewCellStyle As DataGridViewCellStyle)
    
            MyBase.InitializeEditingControl(rowIndex, initialFormattedValue,
                                            dataGridViewCellStyle)
    
            'Obtener Control de edición
            Dim maskedBox As DataGridViewMaskedTextBoxEditingControl =
                TryCast(Me.DataGridView.EditingControl,
                    DataGridViewMaskedTextBoxEditingControl)
            If maskedBox IsNot Nothing Then
                'Establecer texto
                Dim maskedText As String = TryCast(initialFormattedValue, String)
                maskedBox.Text = If(maskedText IsNot Nothing, maskedText, "")
                'Hacer que las propiedades de las columnas personalizadas reflejen
                Dim column As DataGridViewMaskedTextBoxColumn =
                    TryCast(Me.OwningColumn, DataGridViewMaskedTextBoxColumn)
                If column IsNot Nothing Then
                    maskedBox.Mask = column.Mask
                End If
            End If
        End Sub
    
        'Especifique el tipo de control de edición
        Public Overrides ReadOnly Property EditType() As Type
            Get
                Return GetType(DataGridViewMaskedTextBoxEditingControl)
            End Get
        End Property
    
        'Especifique el tipo de datos del valor de la celda
        'Aquí, es de tipo Objeto
        'Dado que es la misma que la clase base
        Public Overrides ReadOnly Property ValueType() As Type
            Get
                Return GetType(Object)
            End Get
        End Property
    
        'Especifica el valor predeterminado de celda para la nueva fila de registro
        Public Overrides ReadOnly Property DefaultNewRowValue() As Object
            Get
                Return MyBase.DefaultNewRowValue
            End Get
        End Property
    End Class
    
    ''' <summary>
    ''' Alojado en DataGridViewMaskedTextBoxCell
    ''' Representa un control MaskedTextBox.
    ''' </summary>
    Public Class DataGridViewMaskedTextBoxEditingControl
        Inherits MaskedTextBox
        Implements IDataGridViewEditingControl
    
        'DataGridView con control de edición visualizado
        Private dataGridView As DataGridView
        'Fila donde se muestra el control de edición
        Private rowIndex As Integer
        '¿El valor de control de edición es diferente del valor de celda?
        Private valueChanged As Boolean
    
        'Constructor
        Public Sub New()
            Me.TabStop = False
        End Sub
    
        '#Region "IDataGridViewEditingControl メンバ"
    
        'Valor de celda cambiado en el control de edición
        Public Function GetEditingControlFormattedValue(
            ByVal context As DataGridViewDataErrorContexts) As Object _
            Implements IDataGridViewEditingControl.GetEditingControlFormattedValue
    
            Return Me.Text
        End Function
    
        'Valor de celda cambiado en el control de edición
        Public Property EditingControlFormattedValue() As Object _
            Implements IDataGridViewEditingControl.EditingControlFormattedValue
    
            Get
                Return Me.GetEditingControlFormattedValue(
                    DataGridViewDataErrorContexts.Formatting)
            End Get
            Set(ByVal value As Object)
                Me.Text = DirectCast(value, String)
            End Set
        End Property
    
        'Aplicar estilo de celda para editar el control
        'Ajuste el color de primer plano, el color de fondo, la fuente, etc. del control de edición al estilo de celda
        Public Sub ApplyCellStyleToEditingControl(
            ByVal dataGridViewCellStyle As DataGridViewCellStyle) _
            Implements IDataGridViewEditingControl.ApplyCellStyleToEditingControl
    
            Me.Font = dataGridViewCellStyle.Font
            Me.ForeColor = dataGridViewCellStyle.ForeColor
            Me.BackColor = dataGridViewCellStyle.BackColor
            Select Case dataGridViewCellStyle.Alignment
                Case DataGridViewContentAlignment.BottomCenter,
                    DataGridViewContentAlignment.MiddleCenter,
                    DataGridViewContentAlignment.TopCenter
    
                    Me.TextAlign = HorizontalAlignment.Center
                    Exit Select
                Case DataGridViewContentAlignment.BottomRight,
                    DataGridViewContentAlignment.MiddleRight,
                    DataGridViewContentAlignment.TopRight
    
                    Me.TextAlign = HorizontalAlignment.Right
                    Exit Select
                Case Else
                    Me.TextAlign = HorizontalAlignment.Left
                    Exit Select
            End Select
        End Sub
    
        'DataGridView con celdas para editar
        Public Property EditingControlDataGridView() As DataGridView _
            Implements IDataGridViewEditingControl.EditingControlDataGridView
    
            Get
                Return Me.dataGridView
            End Get
            Set(ByVal value As DataGridView)
                Me.dataGridView = value
            End Set
        End Property
        'Índice de fila que se está editando
        Public Property EditingControlRowIndex() As Integer _
            Implements IDataGridViewEditingControl.EditingControlRowIndex
    
            Get
                Return Me.rowIndex
            End Get
            Set(ByVal value As Integer)
                Me.rowIndex = value
            End Set
        End Property
    
        'Si el valor ha cambiado
        '¿El valor de control de edición es diferente del valor de celda?
        Public Property EditingControlValueChanged() As Boolean _
            Implements IDataGridViewEditingControl.EditingControlValueChanged
    
            Get
                Return Me.valueChanged
            End Get
            Set(ByVal value As Boolean)
                Me.valueChanged = value
            End Set
        End Property
        'Devolver verdadero hará que el control de edición se procese
        'Cuando dataGridViewWantsInputKey es True, DataGridView puede procesar
        Public Function EditingControlWantsInputKey(ByVal keyData As Keys,
            ByVal dataGridViewWantsInputKey As Boolean) As Boolean _
            Implements IDataGridViewEditingControl.EditingControlWantsInputKey
    
            'Cuando se trata de Keys.Left, Right, Home, End, devuelve True
            'Si no haces esto, el enfoque cambiará a otra celda con estas teclas
            Select Case keyData And Keys.KeyCode
                Case Keys.Right, Keys.[End], Keys.Left, Keys.Home
                    Return True
                Case Else
                    Return Not dataGridViewWantsInputKey
            End Select
        End Function
    
        'Especifique el cursor cuando el cursor del mouse esté sobre el Panel de edición
        'EditingPanel es un panel que aloja controles de edición,
        'Si el control de edición es más pequeño que la celda, la parte que no sea el control será el panel
        Public ReadOnly Property EditingPanelCursor() As Cursor _
            Implements IDataGridViewEditingControl.EditingPanelCursor
    
            Get
                Return MyBase.Cursor
            End Get
        End Property
    
        'Preparar para editar con control
        'Seleccionar texto o insertar puntero como final
        Public Sub PrepareEditingControlForEdit(ByVal selectAll As Boolean) _
            Implements IDataGridViewEditingControl.PrepareEditingControlForEdit
    
            If selectAll Then
    
                Me.SelectAll()
            Else
    
                Me.SelectionStart = Me.TextLength
            End If
        End Sub
    
        'Si cambiar la posición de la celda cuando cambia el valor
        'Verdadero si el tamaño del control de edición cambia cuando se cambia el valor
        Public ReadOnly Property RepositionEditingControlOnValueChange() As Boolean _
            Implements IDataGridViewEditingControl.RepositionEditingControlOnValueChange
    
            Get
                Return False
            End Get
        End Property
    
        '#End Region
    
        'Cuando se cambia el valor
        Protected Overrides Sub OnTextChanged(ByVal e As EventArgs)
            MyBase.OnTextChanged(e)
            'Notificar a DataGridView que el valor ha cambiado
            Me.valueChanged = True
            Me.dataGridView.NotifyCurrentCellDirty(True)
        End Sub
    End Class


    • Editado Poseidon_2511 jueves, 29 de noviembre de 2018 18:40
    • Propuesto como respuesta Pablo Rubio viernes, 30 de noviembre de 2018 16:52
    • Marcado como respuesta Pablo Rubio lunes, 10 de diciembre de 2018 16:40
    jueves, 29 de noviembre de 2018 18:39

Todas las respuestas

  • Hola Poseidon_2511

    Gracias por levantar tu consulta en los foros de MSDN. Con respecto a la misma, para darte una mejor atención es necesario que nos brindes de favor un poco más de información acerca del problema que tienes ya sea colocando fragmento de codigo o form.

    https://docs.microsoft.com/es-es/dotnet/framework/winforms/controls/walkthrough-working-with-the-maskedtextbox-control

    Gracias por usar los foros de MSDN.

    Pablo Rubio
     ____

    Por favor recuerde "Marcar como respuesta" las respuestas que hayan resuelto su problema, es una forma común de reconocer a aquellos que han ayudado, y hace que sea más fácil para los otros visitantes encontrar la solución más tarde. 

    Microsoft ofrece este servicio de forma gratuita, con la finalidad de ayudar a los usuarios y la ampliación de la base de datos de conocimientos relacionados con los productos y tecnologías de Microsoft.  

    Este contenido es proporcionado "tal cual" y no implica ninguna responsabilidad de parte de Microsoft.

    jueves, 29 de noviembre de 2018 15:54
  • La mejor forma de crear un masktextbox dentro de un Datagridview es con el siguiente codigo:

    Public Class DataGridViewMaskedTextBoxColumn
        Inherits DataGridViewColumn
    
        'CellTemplate y especifique el objeto DataGridViewMaskedTextBoxCell
        'Llamar al constructor de la clase base
        Public Sub New()
            MyBase.New(New DataGridViewMaskedTextBoxCell())
        End Sub
    
        Private maskValue As String = ""
        ''' <summary>
        ''' Valor para aplicar a la propiedad de máscara de MaskedTextBox
        ''' </summary>
        Public Property Mask() As String
            Get
                Return Me.maskValue
            End Get
            Set(ByVal value As String)
                Me.maskValue = value
            End Set
        End Property
    
        'Porque hemos añadido nuevas propiedades,
        'Hay una necesidad de reemplazar el 'método Clone
        Public Overrides Function Clone() As Object
            Dim col As DataGridViewMaskedTextBoxColumn =
                DirectCast(MyBase.Clone(), DataGridViewMaskedTextBoxColumn)
            col.Mask = Me.Mask
            Return col
        End Function
    
        'Obteniendo y configurando CellTemplate
        Public Overrides Property CellTemplate() As DataGridViewCell
            Get
                Return MyBase.CellTemplate
            End Get
            Set(ByVal value As DataGridViewCell)
                'DataGridViewMaskedTextBoxCell solamente
                'No se puede establecer en CellTemplate
                If Not (TypeOf value Is DataGridViewMaskedTextBoxCell) Then
                    Throw New InvalidCastException(
                        "DataGridViewMaskedTextBoxCell mascara no indicada" &
                        "Especificar el tipo")
                End If
                MyBase.CellTemplate = value
            End Set
        End Property
    End Class
    
    '''<summary>
    '''Información de texto que se puede editar con MaskedTextBox
    '''Mostrar en el control DataGridView.
    ''' </summary>
    Public Class DataGridViewMaskedTextBoxCell
        Inherits DataGridViewTextBoxCell
    
    
        Public Sub New()
        End Sub
    
        'Inicializar control de edición
        'Dado que el control de edición también es usado por otra celda o columna, la inicialización es necesaria
        Public Overrides Sub InitializeEditingControl(ByVal rowIndex As Integer,
            ByVal initialFormattedValue As Object,
            ByVal dataGridViewCellStyle As DataGridViewCellStyle)
    
            MyBase.InitializeEditingControl(rowIndex, initialFormattedValue,
                                            dataGridViewCellStyle)
    
            'Obtener Control de edición
            Dim maskedBox As DataGridViewMaskedTextBoxEditingControl =
                TryCast(Me.DataGridView.EditingControl,
                    DataGridViewMaskedTextBoxEditingControl)
            If maskedBox IsNot Nothing Then
                'Establecer texto
                Dim maskedText As String = TryCast(initialFormattedValue, String)
                maskedBox.Text = If(maskedText IsNot Nothing, maskedText, "")
                'Hacer que las propiedades de las columnas personalizadas reflejen
                Dim column As DataGridViewMaskedTextBoxColumn =
                    TryCast(Me.OwningColumn, DataGridViewMaskedTextBoxColumn)
                If column IsNot Nothing Then
                    maskedBox.Mask = column.Mask
                End If
            End If
        End Sub
    
        'Especifique el tipo de control de edición
        Public Overrides ReadOnly Property EditType() As Type
            Get
                Return GetType(DataGridViewMaskedTextBoxEditingControl)
            End Get
        End Property
    
        'Especifique el tipo de datos del valor de la celda
        'Aquí, es de tipo Objeto
        'Dado que es la misma que la clase base
        Public Overrides ReadOnly Property ValueType() As Type
            Get
                Return GetType(Object)
            End Get
        End Property
    
        'Especifica el valor predeterminado de celda para la nueva fila de registro
        Public Overrides ReadOnly Property DefaultNewRowValue() As Object
            Get
                Return MyBase.DefaultNewRowValue
            End Get
        End Property
    End Class
    
    ''' <summary>
    ''' Alojado en DataGridViewMaskedTextBoxCell
    ''' Representa un control MaskedTextBox.
    ''' </summary>
    Public Class DataGridViewMaskedTextBoxEditingControl
        Inherits MaskedTextBox
        Implements IDataGridViewEditingControl
    
        'DataGridView con control de edición visualizado
        Private dataGridView As DataGridView
        'Fila donde se muestra el control de edición
        Private rowIndex As Integer
        '¿El valor de control de edición es diferente del valor de celda?
        Private valueChanged As Boolean
    
        'Constructor
        Public Sub New()
            Me.TabStop = False
        End Sub
    
        '#Region "IDataGridViewEditingControl メンバ"
    
        'Valor de celda cambiado en el control de edición
        Public Function GetEditingControlFormattedValue(
            ByVal context As DataGridViewDataErrorContexts) As Object _
            Implements IDataGridViewEditingControl.GetEditingControlFormattedValue
    
            Return Me.Text
        End Function
    
        'Valor de celda cambiado en el control de edición
        Public Property EditingControlFormattedValue() As Object _
            Implements IDataGridViewEditingControl.EditingControlFormattedValue
    
            Get
                Return Me.GetEditingControlFormattedValue(
                    DataGridViewDataErrorContexts.Formatting)
            End Get
            Set(ByVal value As Object)
                Me.Text = DirectCast(value, String)
            End Set
        End Property
    
        'Aplicar estilo de celda para editar el control
        'Ajuste el color de primer plano, el color de fondo, la fuente, etc. del control de edición al estilo de celda
        Public Sub ApplyCellStyleToEditingControl(
            ByVal dataGridViewCellStyle As DataGridViewCellStyle) _
            Implements IDataGridViewEditingControl.ApplyCellStyleToEditingControl
    
            Me.Font = dataGridViewCellStyle.Font
            Me.ForeColor = dataGridViewCellStyle.ForeColor
            Me.BackColor = dataGridViewCellStyle.BackColor
            Select Case dataGridViewCellStyle.Alignment
                Case DataGridViewContentAlignment.BottomCenter,
                    DataGridViewContentAlignment.MiddleCenter,
                    DataGridViewContentAlignment.TopCenter
    
                    Me.TextAlign = HorizontalAlignment.Center
                    Exit Select
                Case DataGridViewContentAlignment.BottomRight,
                    DataGridViewContentAlignment.MiddleRight,
                    DataGridViewContentAlignment.TopRight
    
                    Me.TextAlign = HorizontalAlignment.Right
                    Exit Select
                Case Else
                    Me.TextAlign = HorizontalAlignment.Left
                    Exit Select
            End Select
        End Sub
    
        'DataGridView con celdas para editar
        Public Property EditingControlDataGridView() As DataGridView _
            Implements IDataGridViewEditingControl.EditingControlDataGridView
    
            Get
                Return Me.dataGridView
            End Get
            Set(ByVal value As DataGridView)
                Me.dataGridView = value
            End Set
        End Property
        'Índice de fila que se está editando
        Public Property EditingControlRowIndex() As Integer _
            Implements IDataGridViewEditingControl.EditingControlRowIndex
    
            Get
                Return Me.rowIndex
            End Get
            Set(ByVal value As Integer)
                Me.rowIndex = value
            End Set
        End Property
    
        'Si el valor ha cambiado
        '¿El valor de control de edición es diferente del valor de celda?
        Public Property EditingControlValueChanged() As Boolean _
            Implements IDataGridViewEditingControl.EditingControlValueChanged
    
            Get
                Return Me.valueChanged
            End Get
            Set(ByVal value As Boolean)
                Me.valueChanged = value
            End Set
        End Property
        'Devolver verdadero hará que el control de edición se procese
        'Cuando dataGridViewWantsInputKey es True, DataGridView puede procesar
        Public Function EditingControlWantsInputKey(ByVal keyData As Keys,
            ByVal dataGridViewWantsInputKey As Boolean) As Boolean _
            Implements IDataGridViewEditingControl.EditingControlWantsInputKey
    
            'Cuando se trata de Keys.Left, Right, Home, End, devuelve True
            'Si no haces esto, el enfoque cambiará a otra celda con estas teclas
            Select Case keyData And Keys.KeyCode
                Case Keys.Right, Keys.[End], Keys.Left, Keys.Home
                    Return True
                Case Else
                    Return Not dataGridViewWantsInputKey
            End Select
        End Function
    
        'Especifique el cursor cuando el cursor del mouse esté sobre el Panel de edición
        'EditingPanel es un panel que aloja controles de edición,
        'Si el control de edición es más pequeño que la celda, la parte que no sea el control será el panel
        Public ReadOnly Property EditingPanelCursor() As Cursor _
            Implements IDataGridViewEditingControl.EditingPanelCursor
    
            Get
                Return MyBase.Cursor
            End Get
        End Property
    
        'Preparar para editar con control
        'Seleccionar texto o insertar puntero como final
        Public Sub PrepareEditingControlForEdit(ByVal selectAll As Boolean) _
            Implements IDataGridViewEditingControl.PrepareEditingControlForEdit
    
            If selectAll Then
    
                Me.SelectAll()
            Else
    
                Me.SelectionStart = Me.TextLength
            End If
        End Sub
    
        'Si cambiar la posición de la celda cuando cambia el valor
        'Verdadero si el tamaño del control de edición cambia cuando se cambia el valor
        Public ReadOnly Property RepositionEditingControlOnValueChange() As Boolean _
            Implements IDataGridViewEditingControl.RepositionEditingControlOnValueChange
    
            Get
                Return False
            End Get
        End Property
    
        '#End Region
    
        'Cuando se cambia el valor
        Protected Overrides Sub OnTextChanged(ByVal e As EventArgs)
            MyBase.OnTextChanged(e)
            'Notificar a DataGridView que el valor ha cambiado
            Me.valueChanged = True
            Me.dataGridView.NotifyCurrentCellDirty(True)
        End Sub
    End Class


    • Editado Poseidon_2511 jueves, 29 de noviembre de 2018 18:40
    • Propuesto como respuesta Pablo Rubio viernes, 30 de noviembre de 2018 16:52
    • Marcado como respuesta Pablo Rubio lunes, 10 de diciembre de 2018 16:40
    jueves, 29 de noviembre de 2018 18:39