Cada vez que tengo que pasar código que maneja tipos de datos de C# a VB o viceversa tengo que consultar las equivalencias entre las diferentes instrucciones de los lenguajes: typeof, TypeOf, is, GetType... No sé porqué nunca consigo recordarlo.
Siempre pienso que debería escribir una entrada en el blog para ver si así acabo de retenerlo y, si no, al menos tener un sitio rápido donde puedo consultarlo. Como sé que no soy al único que le pasa me he decidido por fin a ponerlo por escrito.
sábado, 6 de agosto de 2016
jueves, 28 de julio de 2016
ASP.NET MVC. ModelBinderProvider para Tipos Genéricos (y II). KeyValuePair Data Binding
Descargar código de ejemplo
Códigos de muestra - Ejemplos MSDN. ModelBinderProvider para tipos genéricos
Artículos anteriores:
ASP.NET MVC. ModelBinderProvider para Tipos Genéricos (I). Creando el escenario
En el artículo anterior vimos cómo MVC no es capaz de realizar de forma automática el enlace de datos para elementos de tipo KeyValuePair.
ASP.NET MVC trata de utilizar el ModelBinder configurado por defecto, el DefaultModelBinder, para realizar el enlace de datos. La forma de actuar con tipos complejos es siempre la misma: intenta crear una instancia del elemento buscando e invocando un constructor sin argumentos y, a continuación, trata de asignar valores a cada una de sus propiedades.
En el caso de KeyValuePair el tipo sí que tiene un constructor sin argumentos por lo que el DefaultModelBinder será capaz de crear la instancia del elemento, sin embargo las propiedades Key y Value son de sólo lectura, por lo que no será capaz de asignar los valores a las propiedades.
En este artículo veremos cómo realizar el enlace de datos para este tipo de datos.
Códigos de muestra - Ejemplos MSDN. ModelBinderProvider para tipos genéricos
Artículos anteriores:
ASP.NET MVC. ModelBinderProvider para Tipos Genéricos (I). Creando el escenario
En el artículo anterior vimos cómo MVC no es capaz de realizar de forma automática el enlace de datos para elementos de tipo KeyValuePair.
ASP.NET MVC trata de utilizar el ModelBinder configurado por defecto, el DefaultModelBinder, para realizar el enlace de datos. La forma de actuar con tipos complejos es siempre la misma: intenta crear una instancia del elemento buscando e invocando un constructor sin argumentos y, a continuación, trata de asignar valores a cada una de sus propiedades.
En el caso de KeyValuePair el tipo sí que tiene un constructor sin argumentos por lo que el DefaultModelBinder será capaz de crear la instancia del elemento, sin embargo las propiedades Key y Value son de sólo lectura, por lo que no será capaz de asignar los valores a las propiedades.
En este artículo veremos cómo realizar el enlace de datos para este tipo de datos.
lunes, 25 de julio de 2016
ASP.NET MVC. ModelBinderProvider para Tipos Genéricos (I). Creando el escenario
Descargar código de ejemplo
Códigos de muestra - Ejemplos MSDN. ModelBinderProvider para tipos genéricos
En un post anterior mostré cómo podíamos crear y registrar un ModelBinder personalizado en una aplicación MVC (ASP.NET MVC. Crear un ModelBinder personalizado). Sin embargo, el tipo de datos que indicamos a MVC a la hora de registrar el ModelBinder debe ser un tipo de datos específico, no podemos indicar un tipo genérico.
Entonces, ¿cómo podemos crear un ModelBinder para un tipo de datos genérico que ASP.NET MVC no es capaz de enlazar por defecto?
Por suerte ASP.NET MVC nos permite también la opción de registrar proveedores de ModelBinders o ModelBinderProviders los cuales se encargan de crear las instancias de ModelBinders para ciertos tipos de datos.
En este artículo mostraré cómo crear y registrar un ModelBinderProvider para el tipo genérico KeyValuePair<TKey, TValue>. Veremos porqué ASP.NET MVC no es capaz de enlazarlo por defecto, cómo crear el ModelBinder para el tipo y cómo podemos indicarle a MVC que debe utilizar nuestro ModelBinder para enlazar estos tipos de datos utilizando un ModelBinderProvider.
Códigos de muestra - Ejemplos MSDN. ModelBinderProvider para tipos genéricos
En un post anterior mostré cómo podíamos crear y registrar un ModelBinder personalizado en una aplicación MVC (ASP.NET MVC. Crear un ModelBinder personalizado). Sin embargo, el tipo de datos que indicamos a MVC a la hora de registrar el ModelBinder debe ser un tipo de datos específico, no podemos indicar un tipo genérico.
Entonces, ¿cómo podemos crear un ModelBinder para un tipo de datos genérico que ASP.NET MVC no es capaz de enlazar por defecto?
Por suerte ASP.NET MVC nos permite también la opción de registrar proveedores de ModelBinders o ModelBinderProviders los cuales se encargan de crear las instancias de ModelBinders para ciertos tipos de datos.
En este artículo mostraré cómo crear y registrar un ModelBinderProvider para el tipo genérico KeyValuePair<TKey, TValue>. Veremos porqué ASP.NET MVC no es capaz de enlazarlo por defecto, cómo crear el ModelBinder para el tipo y cómo podemos indicarle a MVC que debe utilizar nuestro ModelBinder para enlazar estos tipos de datos utilizando un ModelBinderProvider.
sábado, 16 de julio de 2016
Visual Studio. Cargar ensamblados propios en la ventana C# Interactivo
En Visual Studio 2015 aparece una nueva ventana que nos permite probar código y evaluar su resultado sin necesidad de arrancar y depurar nuestro proyecto: la ventana C# interactivo.
Esta ventana nos permite ejecutar de forma inmediata código C#, incluso haciendo uso de las librerías de clases de .NET Framework o utilizar expresiones LINQ. Pero ¿cómo podemos ejecutar código de nuestras propias librerías o proyectos?
Esta ventana nos permite ejecutar de forma inmediata código C#, incluso haciendo uso de las librerías de clases de .NET Framework o utilizar expresiones LINQ. Pero ¿cómo podemos ejecutar código de nuestras propias librerías o proyectos?
sábado, 18 de junio de 2016
Visual Studio. Buscar y reemplazar con expresiones regulares.
Seguro que las funciones de "Buscar" y "Buscar y reemplazar" del Visual Studio se encuentran entre las funciones que más utilizas dentro del entorno de desarrollo. Sin embargo, si no estás haciendo uso de la posibilidad de usar expresiones regulares, estás utilizando una parte mínima de la potencialidad de estas funciones.
En este post voy a mostrar un ejemplo de cómo puedes realizar búsquedas y cambios masivos en tu código gracias al uso de expresiones regulares.
Créeme, aunque te parezca que usas mucho estas opciones, no es nada comparado con lo que las utilizaras una vez que cojas un poco de soltura con las expresiones regulares,
Hace poco, por ejemplo, en el proyecto en el que me encuentro decidimos establecer como privadas una serie de funciones que definíamos como públicas en cientos de objetos JavaScript diferentes de nuestra aplicación. Un "Buscar y reemplazar" con una expresión regular y listo, en unos segundos estaba hecho el cambio, ahorrándonos un montón de horas de tedioso y mecánico trabajo.
En este post voy a mostrar un ejemplo de cómo puedes realizar búsquedas y cambios masivos en tu código gracias al uso de expresiones regulares.
Créeme, aunque te parezca que usas mucho estas opciones, no es nada comparado con lo que las utilizaras una vez que cojas un poco de soltura con las expresiones regulares,
Hace poco, por ejemplo, en el proyecto en el que me encuentro decidimos establecer como privadas una serie de funciones que definíamos como públicas en cientos de objetos JavaScript diferentes de nuestra aplicación. Un "Buscar y reemplazar" con una expresión regular y listo, en unos segundos estaba hecho el cambio, ahorrándonos un montón de horas de tedioso y mecánico trabajo.
miércoles, 1 de junio de 2016
Juego Snake en aplicación de consola (y II). La serpiente.
Códigos de muestra - Ejemplos MSDN. Juego Snake en aplicación de consola
En el artículo anterior, Juego Snake en aplicación de consola (I). Definiendo la pantalla, vimos cómo crear la pantalla inicial del juego Snake, en éste veremos cómo crear la serpiente, dotarla de movimiento y mostrar comida que pueda ir comiendo y aumentando la puntuación y su longitud.
De esta forma completaremos la funcionalidad básica del juego.
En el artículo anterior, Juego Snake en aplicación de consola (I). Definiendo la pantalla, vimos cómo crear la pantalla inicial del juego Snake, en éste veremos cómo crear la serpiente, dotarla de movimiento y mostrar comida que pueda ir comiendo y aumentando la puntuación y su longitud.
De esta forma completaremos la funcionalidad básica del juego.
martes, 31 de mayo de 2016
Juego Snake en aplicación de consola (I). Definiendo la pantalla.
Códigos de muestra - Ejemplos MSDN. Juego Snake en aplicación de consola
Como no todo va a ser trabajar hoy voy a mostrar cómo podemos desarrollar el clásico juego de la serpiente (Snake) en una simple aplicación de consola.
Como no todo va a ser trabajar hoy voy a mostrar cómo podemos desarrollar el clásico juego de la serpiente (Snake) en una simple aplicación de consola.
lunes, 23 de mayo de 2016
ASP.NET MVC. Crear un ModelBinder personalizado.
Una de las herramientas más útiles de las que disponemos en ASP.NET MVC es el data binding o enlace de datos, que se encarga de transformar de manera automática los datos recibidos del navegador a los tipos de datos usados en los argumentos de las acciones de nuestros controladores.
Sin embargo el proceso de binding que realiza por defecto MVC se nos puede quedar corto cuando utilizamos tipos de datos complejos.
En este artículo voy a mostrar cómo podemos indicarle a MVC cómo debe realizar el enlace de datos con un tipo de datos predeterminado a través de la implementación de un ModelBinder.
El código completo tanto en C# como en Visual Basic .NET está disponible en:
Códigos de muestra - Ejemplos MSDN. Crear un Model Binder personalizado
Sin embargo el proceso de binding que realiza por defecto MVC se nos puede quedar corto cuando utilizamos tipos de datos complejos.
En este artículo voy a mostrar cómo podemos indicarle a MVC cómo debe realizar el enlace de datos con un tipo de datos predeterminado a través de la implementación de un ModelBinder.
El código completo tanto en C# como en Visual Basic .NET está disponible en:
Códigos de muestra - Ejemplos MSDN. Crear un Model Binder personalizado
martes, 17 de mayo de 2016
Windows Forms. Pasar datos entre formularios
El código completo tanto en C# como en Visual Basic .NET está disponible en:
Códigos de muestra - Ejemplos MSDN. Comunicación entre formularios Windows Forms
Esta es una consulta muy habitual: ¿Cómo pasar datos entre dos formularios?
Evidentemente hay múltiples formas de hacerlo y elegir la mejor depende en gran medida del caso particular. En este artículo mostraré un ejemplo de cómo podemos solucionar uno de los escenarios más repetidos y que puede ajustarse a muchos de los escenarios que se plantean habitualmente: crear un formulario para editar los datos de una fila de un DataGridView.
Códigos de muestra - Ejemplos MSDN. Comunicación entre formularios Windows Forms
Esta es una consulta muy habitual: ¿Cómo pasar datos entre dos formularios?
Evidentemente hay múltiples formas de hacerlo y elegir la mejor depende en gran medida del caso particular. En este artículo mostraré un ejemplo de cómo podemos solucionar uno de los escenarios más repetidos y que puede ajustarse a muchos de los escenarios que se plantean habitualmente: crear un formulario para editar los datos de una fila de un DataGridView.
lunes, 11 de enero de 2016
Juego de Ajedrez (III). Definiendo las piezas
Artículos anteriores:
Juego de Ajedrez (I). Introducción a la Programación Orientada a Objetos
Juego de Ajedrez (II). Creando la estructura del proyecto
El código completo tanto en C# como en Visual Basic .NET está disponible en:
Códigos de muestra - Ejemplos MSDN. Juego de Ajedrez
Una vez creada la estructura de clases del proyecto voy a definir la funcionalidad de cada una de las piezas del juego. Para ello crearé una clase para cada tipo de pieza que herede de la clase abstracta ChessPiece.
Juego de Ajedrez (I). Introducción a la Programación Orientada a Objetos
Juego de Ajedrez (II). Creando la estructura del proyecto
El código completo tanto en C# como en Visual Basic .NET está disponible en:
Códigos de muestra - Ejemplos MSDN. Juego de Ajedrez
Una vez creada la estructura de clases del proyecto voy a definir la funcionalidad de cada una de las piezas del juego. Para ello crearé una clase para cada tipo de pieza que herede de la clase abstracta ChessPiece.
sábado, 2 de enero de 2016
Microsoft MVP 2016
Ayer recibí un correo de Microsoft que me hizo una gran ilusión:
Estimado/a Asier Villanueva,
Enhorabuena. Nos complace anunciarle el Premio MVP de Microsoft® de 2016. Este nombramiento se concede a los líderes excepcionales de la comunidad técnica que comparten de forma activa con otras personas su profundo conocimiento técnico así como su experiencia en el uso de la tecnología. Le agradecemos especialmente la contribución que ha realizado en las comunidades técnicas en el área de Visual Studio and Development Technologies a lo largo del pasado año.
Es un gran orgullo pasar a pertenecer a un colectivo como es el de los MVP de Microsoft.
Este reconocimiento me anima mucho en la medida en la que es la constatación de que el trabajo que vengo realizando resulta realmente útil a otros miembros de la comunidad de desarrolladores.
En adelante espero poder seguir aportando como hasta ahora o incluso más (si el tiempo libre me lo permite) y estar a la altura de lo que este galardón significa.
Para aquellos que no conozcáis los premios MVP de Microsoft y queráis obtener más información sobre ellos aquí os dejo el link:
Microsoft MVP Award
Feliz año 2016. Espero que vuestra entrada del nuevo año haya sido tan gratificante como la mía, y que a partir de ahora no haga más que mejorar.
Estimado/a Asier Villanueva,
Enhorabuena. Nos complace anunciarle el Premio MVP de Microsoft® de 2016. Este nombramiento se concede a los líderes excepcionales de la comunidad técnica que comparten de forma activa con otras personas su profundo conocimiento técnico así como su experiencia en el uso de la tecnología. Le agradecemos especialmente la contribución que ha realizado en las comunidades técnicas en el área de Visual Studio and Development Technologies a lo largo del pasado año.
Es un gran orgullo pasar a pertenecer a un colectivo como es el de los MVP de Microsoft.
Este reconocimiento me anima mucho en la medida en la que es la constatación de que el trabajo que vengo realizando resulta realmente útil a otros miembros de la comunidad de desarrolladores.
En adelante espero poder seguir aportando como hasta ahora o incluso más (si el tiempo libre me lo permite) y estar a la altura de lo que este galardón significa.
Para aquellos que no conozcáis los premios MVP de Microsoft y queráis obtener más información sobre ellos aquí os dejo el link:
Microsoft MVP Award
Feliz año 2016. Espero que vuestra entrada del nuevo año haya sido tan gratificante como la mía, y que a partir de ahora no haga más que mejorar.
miércoles, 16 de diciembre de 2015
Juego de Ajedrez (II). Creando la estructura del proyecto
Artículos anteriores:
Juego de Ajedrez (I). Introducción a la Programación Orientada a Objetos
El código completo tanto en C# como en Visual Basic .NET está disponible en:
Códigos de muestra - Ejemplos MSDN. Juego de Ajedrez
Tras hacer un resumen de lo que iremos viendo a lo largo de los diferentes artículos, vamos a meternos en harina creando el proyecto y la estructura básica de clases que encapsularán la funcionalidad de nuestro juego de ajedrez.
Juego de Ajedrez (I). Introducción a la Programación Orientada a Objetos
El código completo tanto en C# como en Visual Basic .NET está disponible en:
Códigos de muestra - Ejemplos MSDN. Juego de Ajedrez
Tras hacer un resumen de lo que iremos viendo a lo largo de los diferentes artículos, vamos a meternos en harina creando el proyecto y la estructura básica de clases que encapsularán la funcionalidad de nuestro juego de ajedrez.
sábado, 12 de diciembre de 2015
Juego de Ajedrez (I). Introducción a la Programación Orientada a Objetos
Hace tiempo me llegó una consulta de un desarrollador que para iniciarse en la programación orientada a objetos había decidido intentar desarrollar un juego de ajedrez.
Me pareció un ejercicio muy interesante así que, siguiendo la idea, decidí "apropiármela" y preparar un juego de ajedrez que pueda servir de ejemplo de programación orientada a objetos en .NET.
Puede que la implementación no sea la óptima, de hecho he ido tomando las decisiones del desarrollo pensando sobre todo en que el código resulte sencillo y fácil de seguir de forma que el lector pueda centrar su atención en la definición de las clases, propiedades, métodos, herencias, etc.
En ocasiones utilizo incluso diferentes soluciones para el mismo problema de forma que existan en el código ejemplos de distintas opciones existentes.
A lo largo de los artículos iré mostrando paso a paso la construcción del código del juego. El lector puede optar por ir construyéndolo según avance en la lectura, o descargarse el código completo al inicio e ir siguiendo las explicaciones sobre él.
Me pareció un ejercicio muy interesante así que, siguiendo la idea, decidí "apropiármela" y preparar un juego de ajedrez que pueda servir de ejemplo de programación orientada a objetos en .NET.
Puede que la implementación no sea la óptima, de hecho he ido tomando las decisiones del desarrollo pensando sobre todo en que el código resulte sencillo y fácil de seguir de forma que el lector pueda centrar su atención en la definición de las clases, propiedades, métodos, herencias, etc.
En ocasiones utilizo incluso diferentes soluciones para el mismo problema de forma que existan en el código ejemplos de distintas opciones existentes.
A lo largo de los artículos iré mostrando paso a paso la construcción del código del juego. El lector puede optar por ir construyéndolo según avance en la lectura, o descargarse el código completo al inicio e ir siguiendo las explicaciones sobre él.
sábado, 5 de diciembre de 2015
ASP.NET MVC. htmlAttributes en los métodos Editor y EditorFor
En muchos de los métodos de extensión de la clase HtmlHelper de ASP.NET MVC podemos encontrar un parámetro htmlAttributes que nos permite indicar valores a atributos HTML adicionales a incluir en el código HTML generado por el método.
Estos parámetros suelen aceptar un objeto IDictionary<string,object> en los que la clave de cada elemento representa el nombre del atributo y el valor del elemento representa el valor del atributo, o un objeto en el que el nombre de sus propiedades se corresponden con los nombres de los atributos y el valor de éstas con el valor de los atributos.
Sin embargo hay dos métodos de gran uso, y en los que resultaría extremadamente útil, en los que no se incluye en ninguna de sus sobrecargas: los métodos Editor y EditorFor.
Estos parámetros suelen aceptar un objeto IDictionary<string,object> en los que la clave de cada elemento representa el nombre del atributo y el valor del elemento representa el valor del atributo, o un objeto en el que el nombre de sus propiedades se corresponden con los nombres de los atributos y el valor de éstas con el valor de los atributos.
Sin embargo hay dos métodos de gran uso, y en los que resultaría extremadamente útil, en los que no se incluye en ninguna de sus sobrecargas: los métodos Editor y EditorFor.
miércoles, 2 de diciembre de 2015
Windows Forms. DataGridView. Columna para números con decimales (y II)
Artículos anteriores:
Windows Forms. DataGridView. Columna para números con decimales (I)
Una vez definida la clase para la definición de la columna aún nos quedaría implementar la lógica de la clase NumericGridCell que se encargará de controlar los caracteres introducidos por el usuario y el formato en el que se mostrarán los números en la celda.
Windows Forms. DataGridView. Columna para números con decimales (I)
Una vez definida la clase para la definición de la columna aún nos quedaría implementar la lógica de la clase NumericGridCell que se encargará de controlar los caracteres introducidos por el usuario y el formato en el que se mostrarán los números en la celda.
domingo, 29 de noviembre de 2015
Windows Forms. DataGridView. Columna para números con decimales (I)
A raíz de la publicación del artículo DataGridView. Columna que acepta sólo números. un par de lectores del blog me cuestionaron sobre la forma de modificar el ejemplo para añadir la posibilidad de introducir números decimales.
Con el objetivo de responder a esta duda vamos a ver cómo podemos definir una columna a la que le podamos indicar no sólo el número de decimales a mostrar, si no también el separador decimal a utilizar a la hora de mostrar los valores.
Con el objetivo de responder a esta duda vamos a ver cómo podemos definir una columna a la que le podamos indicar no sólo el número de decimales a mostrar, si no también el separador decimal a utilizar a la hora de mostrar los valores.
sábado, 26 de septiembre de 2015
LINQ. Ordenar por múltiples criterios.
Esta es una consulta bastante habitual.
Cuando tenemos una colección de elementos podemos utilizar los métodos de extensión OrderBy y OrderByDescending para ordenarla de forma sencilla por alguna de sus propiedades pero, ¿qué sucede cuando el criterio de ordenación es múltiple?
Cuando tenemos una colección de elementos podemos utilizar los métodos de extensión OrderBy y OrderByDescending para ordenarla de forma sencilla por alguna de sus propiedades pero, ¿qué sucede cuando el criterio de ordenación es múltiple?
miércoles, 23 de septiembre de 2015
Visual Studio 2015. La nueva ventana de configuración de excepciones
En Visual Studio 2015 ha cambiado la ventana de configuración de excepciones. La verdad es que la primera vez que fui a usarla me costó encontrarla (ha cambiado también su ubicación en el menú) pero, una vez localizada, me encontré con una ventana mucho más cómoda y práctica.
domingo, 16 de agosto de 2015
Visual Studio Code. El editor de código multiplataforma de Microsoft.
Parece que la apertura de Microsoft a plataformas, lenguajes y herramientas de terceros es una apuesta seria.
Esta apertura a la comunidad de desarrollo, sin encerrarse en su mundo de herramientas, lenguajes y plataformas propias, ya lo había demostrado con diferentes pasos: participando o liderando proyectos open source, adaptando su navegador Internet Explorer a los estándares o modificando su principal herramienta de desarrollo (Visual Studio) no sólo para desarrollar aplicaciones en diferentes plataformas (Mac, Android), si no también para integrarse con herramientas de terceros como Git.
También cabría comentar la posibilidad que da Azure de trabajar con diferentes plataformas y aplicaciones.
Sin embargo sus herramientas de desarrollo (la principal Visual Studio) sigue requiriendo de un sistema Windows para poder ser utilizada.
Pues Microsoft ya ha dado el primer paso para romper esta última barrera, y el responsable de conseguirlo se llama Visual Studio Code.
Esta apertura a la comunidad de desarrollo, sin encerrarse en su mundo de herramientas, lenguajes y plataformas propias, ya lo había demostrado con diferentes pasos: participando o liderando proyectos open source, adaptando su navegador Internet Explorer a los estándares o modificando su principal herramienta de desarrollo (Visual Studio) no sólo para desarrollar aplicaciones en diferentes plataformas (Mac, Android), si no también para integrarse con herramientas de terceros como Git.
También cabría comentar la posibilidad que da Azure de trabajar con diferentes plataformas y aplicaciones.
Sin embargo sus herramientas de desarrollo (la principal Visual Studio) sigue requiriendo de un sistema Windows para poder ser utilizada.
Pues Microsoft ya ha dado el primer paso para romper esta última barrera, y el responsable de conseguirlo se llama Visual Studio Code.
viernes, 14 de agosto de 2015
Windows Forms. Mostrar imagen a pantalla completa
Hace poco me realizaron una pregunta sobre cómo se puede mostrar una imagen a pantalla completa en Windows Forms. La verdad es que es algo que resulta muy sencillo de implentar en Windows Forms y que genera un efecto muy llamativo para el usuario.
Suscribirse a:
Entradas (Atom)

