' LEER UN ARCHIVO DE DATOS EN FORMATO XML
' MOSTRARLO EN UN DATAGRID PERSONALIZADO
' LAS CAJAS DE TEXTO CON LOS TELÉFONOS SÓLO ACEPTAN NÚMEROS
'
' FORMULARIO SECUNDARIO: DataGridTextBoxColumnNumbers.vb
' --------------------------------------

Option Strict Off
Option Explicit On 

'Espacios de nombres necesarios
Imports Microsoft.VisualBasic
Imports System
Imports System.ComponentModel
Imports System.Windows.Forms

'Espacio de nombre propio de la aplicación, al pertenecer a este espacio
'de nombres las 2 clases del ejercicio (Datagrid y DataGridDigitsTextBoxColumn)
'hay herencia entre ellas y podemos usar esta clase DataGridDigitsTextBoxColumn
'dentro de la otra clase DataGrid
Namespace DataGridNumbersOnly

    'Clase DataGridTextBoxColumnNumbers que definiremos en este archivo,
    'hereda de DataGridTextBoxColumn
    Public Class DataGridTextBoxColumnNumbers
        Inherits DataGridTextBoxColumn

        'Método constructor de la clase
        Public Sub New()
            'MyBase se refiere a la clase madre DataGridTextBoxColumn, de la que hereda
            MyBase.New()
            'la instrucción AddHandler asocia un evento a un manipulador de eventos
            'aquí asocia la pulsación de una tecla en el TextBox con el manipulador 
            'de su evento KeyPress y refiere al procedimiento HandleKeyPress
            AddHandler Me.TextBox.KeyPress, New System.Windows.Forms.KeyPressEventHandler(AddressOf HandleKeyPress)
        End Sub

        'PROCEDIMIENTO CON SENTENCIA IF
        'Pocedimiento específico de configuración del cuadro de texto en cuanto a teclas pulsadas
        'Private Sub HandleKeyPress(ByVal sender As Object, ByVal e As KeyPressEventArgs)
        '- ignorar si no es un número
        '- ignorar si hay más de 9 caracteres
        'If (Not (System.Char.IsDigit(e.KeyChar))) Then
        'poner e.Handled a False equivale a decir que la tecla no ha sido manejada por el evento 
        'y, por tanto, la pulsación se envía, pero si e.Handled es True, equivale a decir que la tecla 
        'ya ha sido manejada por el evento (como si la tecla no hubiese sido pulsada, por tanto, 
        'ya no se envía esa pulsación).
        'e.Handled = True
        'End If
        'If (Me.TextBox.Text.Length >= 10) AndAlso (Me.TextBox.SelectionLength = 0) Then
        'e.Handled = True
        'End If
        'End Sub

        'PROCEDIMIENTO CON SENTENCIA CASE... ELSE
        'Pocedimiento específico de configuración del cuadro de texto en cuanto a teclas pulsadas
        Private Sub HandleKeyPress(ByVal sender As Object, ByVal e As KeyPressEventArgs)
            Select Case e.KeyChar ' según el valor de la tecla pulsada
                ' pasan valores si la tecla pulsada es un número de 0 a 9
            Case "1"c, "2"c, "3"c, "4"c, "5"c, "6"c, "7"c, "8"c, "9"c, "0"c
                    e.Handled = False
                    ' si la propiedad Handled del objeto e se pone a True indico
                    ' que la tecla ha sido "manejada" por el evento, equivale a
                    ' indicar que la tecla no ha sido pulsada, pero si la propiedad 
                    ' Handled del objeto e se pone a False indico que la tecla
                    ' todavía no ha sido "manejada" por el evento y se envía.
                Case Else ' en los demás casos, no se pasa la pulsación
                    e.Handled = True
            End Select
        End Sub

    End Class

End Namespace