Vamos a ver cómo podemos utilizar las vistas Entry y Button en una aplicación Xamarin.forms. Esta aplicación tendrá la tarea de validar un DNI.
Empezamos: Crear un proyecto en Visual Studio
Vamos a crear un proyecto Xamarin.Froms en blanco Nuevo proyecto… > Multiplataforma > Aplicación > Aplicación de forms en blanco, yo he llamado al proyecto Comp_dni.
Diseño de la app
Ir al archivo *.xaml (en mi caso Comp_dniPage.xaml). Dentro del ContentPage que tenemos por defecto, voy a agregar un StackLayout con un padding de 50. Elijo esta vista porque es una de las más sencillas para empezar. Contendrá las siguientes vistas:
> La vista Entry para la entrada de texto con las propiedades: x:Name con el valor txtDNI para identificar la vista y Placeholder para mostrar una pequeña ayuda en el formulario.
> La vista Button que muestra un botón en el que se puede hacer clic, con las propiedades: x:Name para identificar la vista y Text para mostrar un titulo en el botón.
<?xml version="1.0" encoding="utf-8"?> <ContentPage xmlns="http://xamarin.com/schemas/2014/forms" xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" xmlns:local="clr-namespace:Comp_dni" x:Class="Comp_dni.Comp_dniPage"> <StackLayout Padding="50"> <Entry x:Name="txtDNI" Placeholder="Introduce tu DNI" > </Entry> <Button x:Name="btnCheck" Text="Comprobar"> </Button> </StackLayout> </ContentPage>
Funcionalidad
Ir al archivo *.xaml.cs (en mi caso Comp_dniPage.xaml.cs).
Primero vamos a crear una variable constante en la clase con el valor: «TRWAGMYFPDXBNJZSQVHLCKET» private const string CORRESPONDENCIA = "TRWAGMYFPDXBNJZSQVHLCKET";
.
Validar DNI
Vamos a crear un método al que yo he llamado CheckDNI, retorna un valor booleano y recibe como parámetro un String que contiene el DNI.
Este método tendrá que validar que el DNI sea correcto comprobando que: el string no sea nulo ni este vacío, tenga nueve caracteres, los ocho primeros son números y el noveno es una letra igual al de una lista de correspondencia según una operación matemática (número de dni % 23).
private Boolean CheckDNI(String dni) { //Se comprueba que el string DNI no sea nulo ni este vacío. if (!string.IsNullOrEmpty(dni)) { //Se comprueba que el DNI tenga 9 caracteres. if (dni.Length != 9) return false; //Se comprueba que los 8 primeros caracteres sean números. Match match = new Regex(@"\b(\d{8})\b").Match(dni.Substring(0, dni.Length - 1)); if (!match.Success) return false; //Se comprueba que la letra del DNI corresponda con la que se calcula con el resultado de (número de DNI % 23). if (!CORRESPONDENCIA[int.Parse(dni.Substring(0, dni.Length - 1)) % 23].ToString() .Equals(dni.Substring(dni.Length - 1, 1).ToUpper())) return false; } else return false; return true; }
Recoger el texto de la vista Entry
Para recoger el texto de la variable txtDNI (es nombre que se le ha dado en el XAML a la vista) llamamos al método Text txtDNI.Text
.
Método que recibirá la llamada del botón
Ahora vamos con el método que será llamado cuando el botón es pulsado. A este método lo he llamado BtnCheck_Clicked y recibe dos parámetros, primero la vista que ha llamado al método en este caso el botón y como segundo parámetro, los datos del evento.
Este método recogerá el valor del texto de la vista Entry del XAML y se lo mandará al método CheckDNI que hemos creado. Dependiendo de la repuesta se mostrará una alerta diferente.
private void BtnCheck_Clicked(object sender, EventArgs eventArgs) { if (CheckDNI(txtDNI.Text)) DisplayAlert("Validación Correcta", "El DNI (" + txtDNI.Text + ") es correcto", "Aceptar"); else DisplayAlert("Error", "El DNI no es correcto", "Aceptar"); }
Llamar a un método cuando se hace clic en el botón
Pasa asignar un método a un botón tenemos que añadir el atributo Clicked al elemento Button del XAML, el valor del atributo es el nombre del método al que se llamará cuando hagamos clic.
<Button x:Name="btnCheck" Text="Comprobar" Clicked="BtnCheck_Clicked"> </Button>