Etiqueta: .NET

Temas relacionados con .NET Framework (todas las versiones)

  • Sergio A. Campos de EXCELeINFO entrevista a elGuille

    Entrevista a Guillermo Som (elGuille) por Sergio Alejandro Campos para el canal EXCELeINFO

    Entrevista a Guillermo Som el guille

    Pues eso… el pasado domingo 14 de junio de 2020 (una semanita después de cumplir los 63 años de edad), Sergio Alejandro Campos me hizo una entrevista en vivo y en directo para su canal de YouTube EXCELeINFO.

    Ya no puedes verla en directo (elemental pequeño saltamontes) pero sí puedes ver la grabación de algo más de 1 hora (1h 25m 35s).

    Este es el enlace para ver la entrevista:
    Ver la entrevista en YouTube.

    Y aquí abajo te dejo la entrevista incrustada 😉

    Nos vemos.
    Guillermo

  • Cuidadin al actualizar Visual Studio 2019

    Pues eso… en Visual Studio 2019, tanto la Preview como la definitiva, existe una opción supuestamente pensada para mejorar la edición de formularios (tanto de Windows Forms como de XAML) y si trabajas con monitores externos puede que te de problemas si esa opción está seleccionada, que es el estado que tiene cuando lo instalas o actualizas (al menos hasta la versión 16.4.4 de la versión final o la 16.5.0 Preview 2 de la versión Preview).

    En la figura 1 y 2 puedes ver esa opción en concreto (Optimizar la representación de las pantallas de píxeles distintas) tanto en inglés como en español.

    Figura 1. Options > General de Visual Studio 2019 (en inglés)
    Figura 2. Opciones > General de Visual Studio 2019 (en español)

    Cuando tienes esa opción seleccionada el Visual Studio ajusta (y lo peor es que sin avisar) los tamaños de los elementos del formulario (y del propio formulario) para que, en teoría, se ajuste adecuadamente.

    Pero, al menos en mi experiencia, lo que hace es volverte loco… ya que te cambia los tamaños de los formularios o de los controles contenidos en esos formularios… lo último que me ha cambiado es el valor de la propiedad ImageScalingSize que es la que se encarga de mostrarte el tamaño de los iconos en un menú.
    En realidad no me cambió el valor (ya que normalmente esa propiedad no se indica y se usan los valores predeterminados), lo que hizo fue añadir el tamaño 24 para los iconos… y, claro… eran algo grandes 😉

    Comentarte cómo uso el Visual Studio.

    Yo tengo un portátil (laptop) con una resolución de pantalla de 1920×1080 con un monitor externo de 3840×2160.

    El Visual Studio lo abro en el monitor externo e intento que todas las ventanas se abran también en ese mismo monitor.

    La opción que te he comentado, la tengo desactivada (sin marcar) ya que de tenerla me cambia las proporciones/tamaños de los controles y ventanas/formularios.

     

    NOTA: Si vas a hacer pruebas para ver qué ocurre te recomiendo que hagas antes una copia del código con el que vas a probar.

    Nos vemos.
    Guillermo

  • Métodos de Extensión (Extesion Methods) en VB y C#

    Pues eso… te voy a mostrar algunos ejemplos de los métodos de extensión (Extension Methods) que no es ni más ni menos que una forma de extender el funcionamiento de tipos ya existentes. Como de costumbre, el código de ejemplo estará tanto para Visual Basic .NET como para C#.

    Por ejemplo, que es lo que mostraré en este «post», tenemos las cajas de texto (TextBox) a los que le daremos propiedades para convertir el contenido de la propiedad Text en valores de tipo fecha (Date), hora (TimeSpan), enteros (Integer), decimales (Decimal) o Boolean.

    Para hacer esto solo tenemos que tener una importación al espacio de nombres System.Runtime.CompilerServices y aplicar al método de extensión el atributo Extension y definir el método con lo que queramos que amplíe al tipo en cuestión. Y lo importante de ese método es que: el tipo a ampliar será el primer argumento del método.

    Definir los métodos de extensión

    Lo primero que hay que hacer es definir los métodos de extensión.

    Esa definición la haremos en clases estáticas que en el caso de Visual Basic nos servirán los módulos (Module) mientras que en C# tendrán que ser métodos compartidos (static) definidos en una clase también compartida o estática (static).

    Veamos el código de una clase simple que añadirá el método AsDate y AsInteger a un TextBox. De forma que si quieres convertir el contenido de la propiedad Text de la caja de texto TextBox1 en una fecha solo tengas que hacer algo como esto: fecha = TextBox1.AsDate.

    Ejemplo de métodos de extensión para Visual Basic .NET

    Imports System.Windows.Forms
    Imports System.Runtime.CompilerServices
    
    Module ExtensionTextBox
    
        ''' <summary>
        ''' Devuelve un valor Date de la propiedad Text del TextBox indicado.
        ''' Si la fecha no es válida devuelve el 1 de enero de 1900.
        ''' </summary>
        ''' <param name="txt">El TextBox a extender</param>
        <Extension>
        Public Function AsDate(txt As TextBox) As Date
            Dim f = New Date(1900, 1, 1)
    
            Date.TryParse(txt.Text, f)
    
            Return f
        End Function
    
        ''' <summary>
        ''' Devuelve un valor Integer de la propiedad Text del TextBox indicado.
        ''' </summary>
        ''' <param name="txt">El TextBox a extender</param>
        <Extension>
        Public Function AsInteger(txt As TextBox) As Integer
            Dim i As Integer = 0
    
            Integer.TryParse(txt.Text, i)
    
            Return i
        End Function
    
    End Module
    

    Ejemplo de métodos de extensión para C#

    using System.Runtime.CompilerServices;
    using System.Windows.Forms;
    
    public static class ExtensionTextBox
    {
        /// <summary>
        /// Devuelve un valor Date de la propiedad Text del TextBox indicado.
        /// Si la fecha no es válida devuelve el 1 de enero de 1900.
        /// </summary>
        /// <param name="txt">El TextBox a extender</param>
        public static DateTime AsDate(this TextBox txt)
        {
            var f = new DateTime(1900, 1, 1);
    
            DateTime.TryParse(txt.Text, out f);
    
            return f;
        }
    
        /// <summary>
        /// Devuelve un valor Integer de la propiedad Text del TextBox indicado.
        /// </summary>
        /// <param name="txt">El TextBox a extender</param>
        public static int AsInteger(this TextBox txt)
        {
            int i = 0;
    
            int.TryParse(txt.Text, out i);
    
            return i;
        }
    }
    

    Ejemplo de uso de los métodos de extensión

    En este ejemplo tendremos un formulario con un par de cajas de texto y unas etiquetas, además de un botón que hará ciertos cálculos con los datos de las cajas de textos y mostrará el resultado en las etiquetas.

    En la siguiente captura tienes el aspecto del formulario de ejemplo y a continuación verás el código para usar esos métodos de extensión.

    Figura 1. El formulario en modo diseño
    Figura 1. El formulario en modo diseño

    El código del botón «Convertir» en Visual Basic y C#

    Private Sub btnConvertir_Click(sender As Object,
                                   e As EventArgs) Handles btnConvertir.Click
        Dim fecha = txtFecha.AsDate
        LabelFecha.Text = "La fecha + 1 día = " & fecha.AddDays(1).ToString("dddd, dd.MMM.yyyy")
    
        Dim entero = txtEntero.AsInteger
        LabelEntero.Text = $"{entero} * 2 = " & (entero * 2).ToString
    End Sub
    \f0
    
    
    private void btnConvertir_Click(object sender, EventArgs e)
    {
        var fecha = txtFecha.AsDate();
        LabelFecha.Text = "La fecha + 1 día = " + fecha.AddDays(1).ToString("dddd, dd.MMM.yyyy");
        var entero = txtEntero.AsInteger();
        LabelEntero.Text = $"{entero} * 2 = " + (entero * 2).ToString();
    }
    

    Solo comentar que si los métodos de extensión están en otro espacio de nombres distinto al de la aplicación donde se usan, habrá que hacer una importación de ese espacio de nombres para que esos métodos estén accesibles.
    Pero esto es algo «sabido», ya que aquí es como si usáramos el código de cualquier otra clase «estática/compartida»: si queremos acceder a los miembros que define debemos tener acceso a esa clase.

    Y esto es todo… espero que te sea de utilidad.

    NOTA:
    Los despistes del Guille… resulta que después de publicar este artículo sobre los métodos de extensión, me olvidé… y hace poco (el 24-ago-2020, estoy escribiendo esto el 29 de agosto de 2020) escribí otro artículo sobre el mismo tema… pero con más ejemplos… Te dejo aquí el enlace por si te sirve para aclarar más aún este tema… en fin… ¡la cabeza del Guille! 😉

    Nos vemos.
    Guillermo