Etiqueta: netcore

  • Tips para crear proyectos de .NET Core (.NET 5.0) en Visual Studio 2019 Preview

    Pues eso… leyendo el otro día el artículo Visual Basic support planned for .NET 5.0 (soporte planeado en .NET 5.0 para Visual Basic) indicaba una serie de tipos de proyectos, entre ellos de Windows Forms y WPF, pero no solo para Windows y usando el .NET Framework (que es lo que dicen por ahí que será lo que nos quede en un futuro a los que preferimos usar Visual Basic en lugar de C# (u otro lenguaje de .NET).

    Así que… abrí el Visual Studio 2019 (Community) Preview (v16.8.0 Preview 2) y me puse a mirar los tipos de proyectos que había… para C# había de esos dos tipos de aplicaciones tanto para .NET Core como para .NET Framework, pero para Visual Basic solo era para este último marco de trabajo.

    Mirando la configuración de los ficheros del proyecto de C# pude crear un proyecto de Windows Forms para Visual Basic que usa el .NET 5.0 basándome en uno de consola (de esos si que hay para el .NET Core o el .NET 5.0).

    ¡Y funciona!

    El problema, es que al agregar los controles al formulario y crear los métodos de evento (haciendo doble-pulsación en el control), los métodos de evento se creaban, pero no estaban conectados con los controles. Y eso es porque al crear los controles (añadiéndolos al formulario) no se definían con WithEvents.

    La solución es fácil, se abre el fichero Form1.Designer.vb, se modifica la declaración de los controles (que suelen estar al final de ese fichero) y asunto arreglado… bueno, si le añades el típico Handles después de la declaración del método, por ejemplo:

    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        Label1.Text = "¡Hola Mundo!"
    End Sub
    

    Esto último es lo menos engorroso de hacer… lo complicado (o tedioso) es convertir ese proyecto de consola a uno de Windows Forms.
    ¡Y no te voy a explicar cómo hacerlo! 🙂
    No, ya que no es necesario hacer nada si sigues el consejo que te daré a continuación.

    Crear proyectos de Visual Basic para .NET Core (o .NET 5.0)

    Si no quieres complicarte mucho la vida, haz lo siguiente (tal como se muestra en la figura 1):

    Selecciona el menú de Herramientas>Opciones y se muestra la ventana de configuración, selecciona Entorno>Características en versión preliminar y ahí marca la casilla Mostrar todas las plantillas de .NET Core en el cuadro de diálogo nuevo proyecto y pulsa Aceptar. Tendrás que cerrar y abrir nuevamente el Visual Studio y ya tendrás todas las plantillas que hay actualmente disponibles.

     

    Usar los nuevos tipos de proyectos

    Si ahora creas un nuevo proyecto (o agregas uno a una solución existente) verás que ya están los proyectos de Visual Basic para todas las plataformas (usando Windows Forms y WPF entre otros).

    Una vez que seleccionas uno de los proyectos para «todas las plataformas» te dará la opción de elegir la plataforma de destino (el «framework» que usarás). (ver la figura 3)

    Si eliges una aplicación de WPF te mostrará las 3 opciones de la figura anterior, si eliges una aplicación de Windows Forms, solo mostrará .NET Core 3.1 y .NET 5.0.

     

    NOTA:
    Como sabrás .NET 5.0 es una especie de remix entre el .NET Framework y el .NET Core o lo que es lo mismo, es la continuidad de .NET Core, pero unificado con el .NET Framework.
    Y la primera versión definitiva está planeada para noviembre de este año de 2020.

     

    ¿Se soluciona algo al crear así las aplicaciones de Windows Forms?

    Pues no… o casi… Me refiero a que al añadir un control al formulario y hacer doble-clic en él se genere correctamente el método de evento.

    Ni usando el .NET Core 3.1 ni usando el .NET 5.0 (al menos en Visual Basic) se generan correctamente esos métodos de evento.

    Si usas .NET Core 3.1 como plataforma de destino, al menos se definirán los controles con WithEvents, pero tendrás que añadirle el Handles o enlazar el evento y el método con AddHandler.

    Si usas como plataforma de destino el .NET 5.0, no se definen los controles con WithEvents y, por tanto, tampoco se crean los métodos con Handles ya que es un requisito el que las variables (controles en este caso) estén definidos con WithEvents para permitir definir los eventos con Handles.

     

    A esperar toca…

    Esperemos que en futuras revisiones del .NET 5.0 o de Visual Studio esté solucionado, si no… lo tenemos complicado.
    No sé quién será el encargado de arreglar esto, supongo que los de VS, y esperemos que sea así, ya que el .NET 5.0 ha entrado en lo que llaman la fase “feature complete” (función completa) en la Preview 8 de hace una semana y ya solo nos quedan las release candidate en las que solo arreglan bugs, no añaden nuevas características.

    Habrá que reportarlo como BUG para ver si hacen algo y lo solucionan… porque si no lo solucionan, es que realmente no quieren que los desarrolladores de Visual Basic sigamos usándolo… y… optemos por cambiar a C#… en fin…

     

    Nota:
    Aunque al crear los proyectos de Windows Forms y WPF aparentemente sean para todas las plataformas, en realidad solo están soportadas en Windows.
    O al menos eso quiere decir (o es lo que yo entiendo que significa) esto en la configuración de la aplicación:

    <TargetFramework>net5.0-windows</TargetFramework>
    

     

    Espero que te haya servido para algo todo lo aquí comentado… ya sabes que esa es la idea 😉

    Nos vemos.
    Guillermo

  • Contar las palabras de un texto usando expresiones regulares (RegEx)

    Pues eso… que estoy preparando el artículo para usar dos RichTextBox de WPF sincronizados y esta es una de las cosas que allí (cuando lo publique) te explicaré. Hay muchas cosas que te tengo que explicar, así que… hoy empiezo por la más simple o que menos texto necesita Winking smile

    Esto es sencillo, pero… lo necesité para mostrar el número de palabras del documento activo (en el ejemplo de los RichTextBox sincronizados voy a usar 2 RichTextBox y un TextBox, los tres sincronizados -si así lo decides- ) y no lo investigué… preferí buscar una solución que alguien haya publicado ya… es que esto de las expresiones regulares, más que regulares son malas jajajajaja.

    En serio, encontré un sitio web, en realidad un foro de Microsoft en el que alguien respondía con el código que te voy a mostrar, eso sí, el código original está en C# y para la aplicación base (ya sabes que empiezo escribiendo los ejemplos o mis aplicaciones con Visual Basic para .NET).

    Una vez que se ve el código, uno dice… ¡pos qué fácil era! pero como todas estas cosas, hay que hacerlo primero Winking smile

    Este es el código de una función que recibe una cadena de texto y devuelve el número de palabras que hay.

    La versión de Visual Basic .NET

    ''' <summary>
    ''' Contar las palabras de una cadena de texto
    ''' 
    ''' Adaptado usando una cadena en vez del Text del RichTextBox
    ''' (sería del RichTextBox para WinForms)
    ''' El código lo he adaptado de:
    ''' https://social.msdn.microsoft.com/Forums/en-US/
    '''     81e438ed-9d35-47d7-a800-1fabab0f3d52/
    '''     c-how-to-add-a-word-counter-to-a-richtextbox
    '''     ?forum=csharplanguage
    ''' </summary>
    Private Function TextWordCount(texto As String) As Integer
        Dim wordColl As MatchCollection = Regex.Matches(texto, "[\W]+")
        Return wordColl.Count
    End Function
    

    La versión de C#:

    /// <summary>
    /// Contar las palabras de una cadena de texto
    /// 
    /// Adaptado usando una cadena en vez del Text del RichTextBox
    /// (sería del RichTextBox para WinForms)
    /// El código lo he adaptado de:
    /// https://social.msdn.microsoft.com/Forums/en-US/
    ///     81e438ed-9d35-47d7-a800-1fabab0f3d52/
    ///     c-how-to-add-a-word-counter-to-a-richtextbox
    ///     ?forum=csharplanguage
    /// </summary>
    private int TextWordCount(string texto)
    {
        MatchCollection wordColl = Regex.Matches(texto, @"[\W]+");
        return wordColl.Count;
    }
    

    Aquí tienes un ejemplo de uso en una aplicación de consola de .NET Core para Visual Basic y la salida del código.

    Imports System
    Imports System.Text.RegularExpressions
    
    Module Program
        Sub Main(args As String())
            Dim s = "Hello World de las aplicaciones de consola en .net core!"
            Console.WriteLine(s)
            Dim w = TextWordCount(s)
    
            Console.WriteLine($"la cadena anterior tiene {w} palabras")
    
            Console.ReadKey()
        End Sub
    
        ''' <summary>
        ''' Contar las palabras de una cadena de texto
        ''' 
        ''' Adaptado usando una cadena en vez del Text del RichTextBox
        ''' (sería del RichTextBox para WinForms)
        ''' El código lo he adaptado de:
        ''' https://social.msdn.microsoft.com/Forums/en-US/
        '''     81e438ed-9d35-47d7-a800-1fabab0f3d52/
        '''     c-how-to-add-a-word-counter-to-a-richtextbox
        '''     ?forum=csharplanguage
        ''' </summary>
        Private Function TextWordCount(texto As String) As Integer
            Dim wordColl As MatchCollection = Regex.Matches(texto, "[\W]+")
            Return wordColl.Count
        End Function
    
    End Module
    

    Y esta es la salida por la consola de ese código.

    Y esto es todo. Smile

    ¡Mañana más!

    Nos vemos.
    Guillermo

    P.S.
    Ese código funciona también en .NET Core, la captura es de una aplicación de consola de .NET Core

  • ¿Quieres aprender a programar usando .NET Core sin instalar nada?

    Pues eso… me he metido en la página de instalación del .NET Core 3.0 SDK y he visto un botón con el enlace «Get Started» (ver la figura 1) y me ha llevado a la página de .NET Tutorial – Hello World in 10 minutes y en la parte de la izquierda he visto un botón con el texto Try .NET in your browser (ver figura 2) y lo he pulsado… y me ha llevado a una página en la que te va explicando las cosas básicas para crear una aplicación de consola, empezando con el clásico «Hello World!» (ver figura 3) que después ha pasado al «Hello Guillermo!» (o tu nombre) y ha seguido haciendo cambios y enseñando algunas cosas, que al menos yo ya había leído, pero así lo he tenido más claro (ver figura 4)…. bueno, es curioso más que nada… y no acaba ahí la cosa (yo no he seguido) pero se ve que sigue con otras cosas como trabajar con números, aunque esta vez ha cambiado el formato, pero básicamente es en el mismo tono (ver figuras 5 y 6), así que… te lo recomiendo ya que las cosas que incluyen son:

    Análisis de las operaciones matemáticas con enteros
    Análisis sobre el orden de las operaciones
    Información sobre los límites y la precisión de los enteros
    Operaciones con el tipo double
    Operaciones con tipos de punto fijo

    Eso sí, todo con puntos y comas… Smile

    Las capturas

    Figura 1. Get Started en la página de descarga del .NET Core 3.0 SDK
    Figura 1. Get Started en la página de descarga del .NET Core 3.0 SDK

    Figura 1.

    Figura 2. El tutorial con el botón de Try .NET in your browser
    Figura 2. El tutorial con el botón de Try .NET in your browser

    Figura 2.

    Figura 3. El tutorial de .NET In-Browser
    Figura 3. El tutorial de .NET In-Browser

    Figura 3.

    Figura 4. String Interpolation
    Figura 4. String Interpolation

    Figura 4.

    Figura 5. Aquí acaba el tutorial .NET In-Browser
    Figura 5. Aquí acaba el tutorial .NET In-Browser

    Figura 5.

    Figura 6. El tutorial de C# sigue con el compilador In-Browser
    Figura 6. El tutorial de C# sigue con el compilador In-Browser

    Los enlaces:

    Espero que si no te es de utilidad al menos te relaje un poco… jajajaja

    Nos vemos.
    Guillermo