Experimentando con Inventor, Scratch, AppSheet de Google, Roblox y Visual Studio de Microsoft.


MICROBIT


Micro:bit es una pequeña tarjeta programable del tamaño de la palma de una mano diseñada para aprender a programar. Además, debido a los sensores que incorpora nos va permitir realizar proyectos muy interesantes.

👉 Introducción a Micro:bit

👉  Manual de programación Micro:bit


MAYO 2025


Marzo 2025💗


Tanto MIT App Inventor como Scratch son entornos de programación visual diseñados para hacer que la programación sea accesible para principiantes, especialmente adolescentes que además lo dan en clase de Robótica en 1º de ESO. Comparten varias similitudes clave:

Programación basada en bloques:
Ambos utilizan una interfaz de programación basada en bloques, donde los usuarios arrastran y sueltan bloques de código para construir programas. Esto elimina la necesidad de escribir código complejo y reduce los errores de sintaxis.

Enfoque educativo:
Ambos están diseñados con un enfoque educativo, con el objetivo de enseñar conceptos de programación y pensamiento computacional de una manera divertida y atractiva.

Creación de aplicaciones interactivas:
Ambos permiten a los usuarios crear aplicaciones interactivas, ya sean juegos, animaciones o aplicaciones móviles.

Comunidad y recursos:
Ambos cuentan con comunidades activas y una amplia gama de recursos en línea, incluidos tutoriales, ejemplos y foros de discusión.

Desarrollado por el MIT:
Ambos fueron desarrollados por el Instituto Tecnológico de Massachusetts (MIT), lo que garantiza una base sólida y un enfoque en la educación.

Sin embargo, también existen diferencias significativas:
Plataforma de destino:
Scratch se utiliza principalmente para crear animaciones, juegos y proyectos interactivos que se ejecutan en computadoras de escritorio o navegadores web.
MIT App Inventor se centra en la creación de aplicaciones para dispositivos Android.
Nivel de complejidad:
Scratch tiende a ser más adecuado para principiantes absolutos, mientras que MIT App Inventor puede ser un poco más complejo debido a su enfoque en la creación de aplicaciones móviles.
Funcionalidad:
MIT App Inventor permite crear aplicaciones que pueden interactuar con las funcionalidades de los dispositivos móviles, como el GPS, la cámara y los sensores, lo que ofrece un mayor rango de posibilidades.

Se puede probar la aplicación o proyecto, instalando en el móvil la app Mit Inventor con Google Play instalando en el móvil o instalando en el PC un emulador, creo que esto es mejor hasta no tener el proyecto terminado y traspasarlo al móvil, porque facilita las prueba de la aplicación que estemos realizando, a semejanza de como interactuamos en Scatch.


Mover una pelota en la pantalla del emulador

Curso Programa tus propias App para Androide
Ejercicios propuestos por Mit Inventor

GPS Ubicación

He realizado esta aplicación "Ubicación" que permite copiar la latitud y longitud
actual en el portapapeles para enviar, guardar o pegar en otro navegador.
La he exportado a mi móvil y funciona.

He importado la extension clipboard para tener el portapapeles


📐📑Diseños de botones para usarlos en Mit Inventor




Block de Notas con copia al portapapeles

Pantalla Inicio y al Salir guarda las notas en el portapapeles. extension clipboard 

Registrar Notas

Ver Notas


Calculadora básica con listado de operaciones y copia en portapapeles

Calculadora básica, pantalla 1, operaciones básicas +-*/ con repetición y guardado en BD.

Calculadora - pantalla 2 - lectura BD base de datos con listado de operaciones

Mi Memory Card de los años 60



Cartas del Memory Card 

Es el mismo que realice en Scratch, lo he convertido a una Apk para 
usarla en el móvil programando con Mit Inventor, con 20 cartas
que en cada nuevo juego se barajan y salen en diferentes posiciones.


Bloque para asignación de cartas a los botones


Bloque para comparar la selección de carta realizada

Memory Familias del Mundo

He realizado esta variación del clásico Memory llamado Familias del mundo, con 12 cartas basadas en su original del año 65.



He usado el temporizador (clock) a intervalos de 100 ms en vez del sensor Giroscopio
 para imitar  el bloque de control "por siempre" de Scratch ahorrando batería del móvil.

Si necesitas ejecutar tareas repetitivas a intervalos regulares, el temporizador (Clock) es generalmente más eficiente en términos de consumo de batería que el sensor giroscopio, este esta mas enfocado en aplicaciones que requieren detectar la orientación del dispositivo en tiempo real.
El componente "temporizador" (Clock) te permite ejecutar bloques de código a intervalos regulares. Puedes configurarlo para que se active cada cierto tiempo (por ejemplo, cada 100 milisegundos) y así simular un bucle continuo.

La vibración para la alarma no funciona en móviles con Androide 13 o superior, ni en modo emulación

Para aplicaciones del móvil, cuando se hace uso de bases de datos con entrada tipo formularios y además requiere compartir con otras personas es mejor y más fácil el sistema AppSheet de Google.



Menú superior seleccionable para mi canal Youtube y blogs










Enero a Febrero 2025💗

Scratch es un programa informático diseñado para que  adolescentes, alumnos de instituto y usuarios principiantes, aprendan a programar utilizando una interfaz amigable, intuitiva, y fácil. 

Ofrece un lenguaje de programación creado por el MIT en forma de bloques ensamblados, con el que se pueden crear historias interactivas, juegos, animaciones o aplicaciones para  robótica. Su nombre proviene de la palabra «scratching», la cual, en el ámbito de la programación, significa que hay trozos de código que pueden reutilizarse, combinarse y adaptarse fácilmente para nuevos usos.         

A  través de Scratch  los niños no solo aprenden a programar sino que además aprenden a organizar su pensamiento, a expresarse, a resolver problemas a través de una secuencia ordenada de instrucciones, desarrollando estrategias cognitivas de planificación, organización, análisis, representación,… utilizando la lógica matemática o la lectoescritura de manera funcional y significativa.   

Sirve también para mayores 😆 regenerando neuronas,  además permite programar una placa Makey (robótica) para usarlo en sesiones de rehabilitación.

📟Personalmente me encanta programar en Scratch.💕 
     Uso dos nombres de usuarios: reporcibernetico53  y  Profecibernetico53    


Scratch es un programa genial sobre todo para que los niños
se inicien con la programación aplicada a la robótica,
con unas pocas instrucciones, consigo 
que sus personajes se pongan a bailar.


Mi calculadora




Soy una Calculadora parlante
 (al pulsar punto en el 1º nro. se le da el valor resultado)
Cambiar a Marivi 


 Mi nieto Israel el goleador

 
Juego de  mis nietas Jara y Leri (Memory)

Mi imitación del Memory card de los 60
✅Pulsa la "Bandera Verde"  o toca el altavoz 📢 para oír música, juega al 🌟Memory card🌛 que he realizado, imitando al de los años 60.🔝
🔀 Al juego lo he dotado de 6 combinaciones aleatorias, realizadas con las parejas de imágenes
Concéntrate y podrás calificar tu rapidez de procesamiento visual, es decir la eficiencia de tu memoria entre 1 y 5. Siendo el 5 el mejor resultado.⌛

Robótica


Con la misma facilidad, con unos simple pasos de programación con 
Scratch, he logrado que mi dron Tello de DJI realice unas maniobras.

Robot Maqueen 

Su nombre es Maqueen y es un robot de programación gráfica para educación STEM diseñado para BBC micro: bit. Su chasis es plug and play y permite a los niños aprender rápidamente programación gráfica para entretener y fomentar el interés de los niños en la ciencia y el pensamiento lógico. Viene totalmente montado a falta de conectar las ruedas y las pilas, por lo tanto no es necesario soldar y se puede poner a funcionar en pocos minutos con los códigos de ejemplo

La placa Micro:Bit dispone de Bluetooth integrado, por lo que es posible conectarla con el teléfono móvil u otro dispositivo



CreatiCode  Scratch 3D +IACreatiCode, se basa en la versión de código abierto de MIT Scratch 3.0. se ha expandido Scratch a un lenguaje de programación con todas las funciones para todos, como agregar soporte para funciones y tablas. También hemos agregado soporte para muchas tecnologías interesantes, como el modelado 3D, estructuras de datos y algoritmos, nube computación, inteligencia artificial, etc.
Por ejemplo, pueden construir un mundo virtual en 3D propio y experimentarlo a través de lentes de realidad virtual; pueden renovar sus propias aulas con muebles 3D o plantas a través de la realidad aumentada; pueden diseñar y construir un modelo 3D de un vehículo lunar y luego imprimirlo.






¿Cuál es la diferencia entre CreatiCode y Roblox?
Primero, necesitas usar un programa editor de juegos separado y el lenguaje Lua para crear proyectos 3D de Roblox, pero en CreatiCode, usas el mismo patio de juegos basado en bloques para crear y ejecutar proyectos 2D o 3D. .
En segundo lugar, en CreatiCode, se aplica un proceso de revisión de proyectos muy estricto para asegurar de que todos los proyectos y comentarios sean apropiados para los niños
En tercer lugar, en CreatiCode, no hay moneda virtual y los niños no necesitan pagar por equipos o juegos.

Se puede combinar la IA y el lenguaje de programación Scratch
Existen herramientas, como Machine Learning for Kids, que permiten unir ambas tecnologías y desarrollar proyectos sencillos, capaces de ayudar a introducir a los alumnos al aprendizaje automático de forma divertida e interactiva.








Code.org

Con los cursos implementados en "la hora del código",  los estudiante aprenden a programar animaciones, arte interactivo y juegos en el Laboratorio de juegos.


Tanto Scratch como "Code", comparten el objetivo común de fomentar el aprendizaje de la programación entre los estudiantes, utilizando herramientas y actividades diseñadas para hacer que la codificación sea accesible y atractiva para todos. 






💞2023 - 2024 




Aplicaciones  realizadas entre 2023 y 2024

Para aplicaciones en el móvil que requieran usar formularios como entrada para mantener una base de datos, recomiendo Appsheet de Google online y gratuita (hasta 10 puestos: Pc, Portatil, Tablet o Móvil), además permite compartir las aplicaciones con otras personas, es más eficiente y más fácil de programar que Mit inventor.

Appsheet es una herramienta espectacular para crear Apps para el teléfono móvil.

Las aplicaciones de AppSheet se crean a partir de fuentes de datos, desde hojas de cálculo de Google, Excel, BigQuery, SQL y hasta Salesforce, entre otros. La actividad de los usuarios de la aplicación se sincroniza con las fuentes de datos conectadas. 

Genera automáticamente acciones y vistas gracias a la inteligencia artificial (IA) y al aprendizaje automático del Machine Learnin.

Las aplicaciones son dinámicas y se pueden utilizar en todos los dispositivos móviles o navegadores. Puedes diseñar su interfaz a partir de plantillas para crear listados, mapas, calendarios, paneles de control y mucho más. 

AppSheet permite crear aplicaciones con prácticamente todas las funcionalidades totalmente gratis con su plan FREE (o gratuito) que permite que hasta 10 usuarios tengan esa app en sus dispositivos. Esta versión no tiene límite, por lo que puedes estar el tiempo que quieras en dicho plan, puedes crear tantos prototipos de app como desees antes de comenzar cualquier plan de pago que se adapte a tus
necesidades.


Se pueden realizar aplicaciones para llevarlas en el móvil, para organizar tareas, compras, presupuestos, control de finanzas en el hogar, calculo entre fechas, inventarios, listas,  de turismo con puntos de interés, para usarla como GPS combinada con Google Maps / Openstreet Maps y otras como la de números de Años/Meses/Días entre fechas, rectas de cocina o una sofisticadas calculadora, usando en casi todas ellas como base de datos, la hoja de cálculo de Google o bien la base de datos nativa que trae AppSheet, ahora como novedad estoy diseñando aplicaciones, integrándole en sus prompt la IA de y CHAT GPT y GEMINI de Google, siendo esta ultima por ahora gratuita.


👽Las siguiente Aplicaciones, son originales diseñadas y realizadas en mis ratos libres.




Octubre 2024

Ejemplo con CHAT GPT

Ejemplo simple del uso combinado AppSheet y Chat Gpt



Chat GPT


Para usar Chat GPT en la hoja de calculo, hay que cargar y habilitar la extensión SheetGPT 
la versión gratuita esta limitado a usarla  unas pocas veces y ya la he agotado.

✨GEMINI

***** Por lo que usare  GEMINI para las nuevas aplicaciones *****
Nota: El “nivel gratuito” de la API de Gemini se ofrece a través del servicio API
con límites de velocidad más bajos para fines de prueba.
 El uso de Google AI Studio es completamente gratuito en todos los países disponibles .

Aplicación "Profe" realizada con Appsheet y la programación de la IA de Gemini:
 Resolución de un problema de Matemática 

Appsheet con IA de Gemini, realizando un programa para la calculadora HP-42


Resolución de un problema de Física con AppSheet y la IA de Gemini

Aplicación "Profe": Desarróllame un Tema de Matemáticas: Fracciones con Ejercicios para 1 de ESO

Tomando una foto del problema a tratar bien de un libro o manuscrito,
 mi aplicación "Profe" lo resuelve directamente.




Prompt a introducir en IA para obtener una respuesta mas detallada


Aplicación de IA con Gemini

Prompt en el apartado Avanzado introducidos en la aplicación realizada con  Gemini IA

Formulas en Google Sheet
="Actua como si fuese un:"&B2&" ,"&C2&" ,"&D2&" ,"&E2&" ,"&F2&" ,"&G2 =Gemini(H2)


Ejemplo del uso combinado Google Sheet y Gemini


Crear una clave API (Apy Key)

Para que funcione la formula  =Gemini(B3&C3), hay que conseguir una clave valida en Google AI Studio, generando la clave API o APY Key para el proyecto de Google Sheet.

Esta APY Key que ahora se utiliza gratis porque nos reducen la velocidad de respuesta (a veces se nota bastante), en un futuro seguramente dejara de serlo, como me ha pasado en una de mis aplicaciones que usaba la API de ChatGpt.
Pero mientras tanto la usare con aplicaciones como "Profe" que he realizado en Appsheet para ayudar con los deberes a mi nieto.


Nuevo: Analizar una imagen desde Googel Sheet

La url debe estar depositada en drive y compartida copiando el enlace


Gemini : Analiza una imagen de Drive con una url compartida y traduce el texto 

Formulas empleadas:
=VISION(B2)

=GOOGLETRANSLATE(D2;"EN";"ES")



🚋Aplicación de Turismo
Muy útil para llevar en el móvil.  2023




Al tomar una foto del lugar o introducir su nombre, se guarda automáticamente su ubicación, marcándose también en la pestaña Mapa el sitio visitado.
 Esta opcion resulta muy practica en un viaje, pues posteriormente podremos usar esta misma aplicación conectada con google map u otra aplicación GPS, donde pegaremos la longitud y latitud obtenidas para regresar después al mismo sitio o compartir los lugares visitados.


También se puede realizar el marcado previo y tener una lista de los sitios a visitar posteriormente.

Cuando lo requieras, te indicara conectando con Google Maps, 
cómo llegar al sitio desde tu ubicación actual pulsando en el icono🚘.



Se han creado en la pestaña Menu  🈪 2 nuevas Vistas:

Coordenadas GPS, Distancias (Entre dos puntos)

En Coordenadas GPS:  se obtiene con solo introducir parte del nombre del sitio a buscar, la dirección completa, las coordenadas GPS y la vista Mapa o Satélite del sitio localizado.

          Distancia se mide entre dos coordenadas GPS.

 





⛳Aplicación GPS con OpenStreetMap

En esta aplicación derivada de la anterior, usaremos  OpenStreetMap versión curvas de nivel "&layers=Y", para senderismo o ciclismo, en lugar de Google Map.

En archivo configuración de Google Sheet, he cambiado la configuración regional a Reino Unido para que el separador decimal sea el punto y no la coma.



En la vista GPS se obtiene con solo introducir parte del nombre del sitio a buscar: la dirección completa, la Latitud, Longitud y la URL para abrir el OpenStreetMap por el sitio localizado.

Para poder desglosar las Coordenadas en Latitud y Longitud he usado la función SPLIT (D2,",") .
En la URL he usado la función CONCATENAR, para asignar la latitud y longitud al enlace de OpenStreetMap de forma que se visualice directamente el sitio indicado en el mapa.
 "#map=19" es el nivel máximo de zoom.


La Longitud y Latitud están en el formato grado decimal D.Dº , compatible con Google Maps y otras aplicaciones GPS para el móvil.

Podemos cambiar la dirección en la URL y enlazar la aplicación con Bing Maps u otros mapas on line


       Se puede enlazar con aplicaciones GPS para senderismo, como "Maps Me" que también usa el OpenStreetMap  o el IGN Mapas de España, copiando y pegando la Longitud y Latitud obtenida (36.931810, -4.789954), como punto de referencia.

                                           
Maps Me

 
IGN Mapas de España




🔔Tareas Pendientes y Completadas
🌈NuevoEnlace con el calendario de Google, 
los eventos apuntados en nuestro calendario, 
se añaden a la lista de Tareas pendientes.



 Usamos Google Sheet como Base de datos 

1 Generar la aplicación AppSheet = Lista de Tareas
2 Create Start whith exixting data
3 choose your data Google sheet
 4  Seleccionar la hoja de calculo Hoja1


Generamos la vistas Lista de Tareas

Group by: divide la vista en Tareas Pendiente y Completada y con Cout activado cuenta las tareas



Usaremos  la herramienta ☇ Actions para chequear con la casilla de verificación,
 el estado de las tareas y si estas han sido completadas o están pendientes

Asignamos color personalizado al calendario


Creamos la columna virtual "Color"

IF ([Estado] ="Pendiente", green, IF ([Estado] ="Completado", orange,blue))

Detallamos los valores (color tipo) a emplear en la columna "Color"


Por ultimo cambiamos en la vista de "Calendario Tareas" la categoría "Estado" por "Color"



🌈Nuevo: He añadido dos nuevas vistas, sincronizando esta aplicación Tareas
 con Google Calendar y Google Map

Con esta nuevas vistas, añado a la organización de mis eventos y tareas, sincronizándola con mi Calendario de Google, programando también las ubicaciones adjuntas a la tarea y cuando se accede a esta, se abre automáticamente el Google Map dándome las indicaciones para llegar.

Seleccionamos dentro de la aplicación Tarea > 💽Data >  Add data  >  New source > Google Calendar


Localiza las direcciones de mis Tareas pendientes, las marcas de ubicación 💚verdes
son las localizaciones de los eventos y con🚘Get driving directions me indica como llegar
🚩usando Google Map desde donde estoy actualmente.


Usa la tabla "primary" creada al sincronizar  "Google Calendar" con "Google Map"

Tabla Primary creada automáticamente al sincronizar Google calendar con la base de datos de Tareas


Creamos la Acción "Enviar Tarea" para subir eventos desde el Calendario de Google a la lista de Tareas
Acción Enviar Tarea
Enlazamos con la Acción la tabla "Primary" del Calendario de Google con la tabla "Hoja 1" de Tareas



Años mes y días entre fechas usando AppScheet



Usamos Google Sheet como calculadora y Base de datos 




Funciones empleadas para el calculo de fechas:

=SIFECHA(Fecha!B2;Fecha!C2;"Y")

=SIFECHA(Fecha!B2;Fecha!C2;"YM")

=SIFECHA(Fecha!B2;Fecha!C2;"MD")



1 Generar la aplicación AppSheet = Edad
2 Create Start whith exixting data
3 choose your data Google sheet
 4  Seleccionar la hoja de calculo Edad-Fecha

Add new data 
Se selecciona la hoja Calculo= add table Calculo (Edad)
Add to App
1 Generar las vistas Fechas 
2 Generar vista calculo(Edad) add view calculo en Primary Navegation


🍰Costo total y por porciones de una Receta de Cocina
(Septiembre 2024)


Pantallas: Base de Datos de Ingredientes y Lista de Recetas

Data Hoja 1 (lista de recetas)

Conectamos las tablas "Hoja 1" y  "BaseProductos" con REF(Referencia) mediante el elemento Producto y los demás elementos de los ingredientes de la Receta, mediante Data Vality con la formula:
Peso/ud Paquete  >>>  BaseProductos [Peso/ud Paquete]
Ud medida   >>>   BaseProductos[Ud medida]
Costo Paquete  >>>  BaseProductos[Costo Paquete]






Toma inicialmente la descripción
del nombre de la receta de la tabla "Id"





Botones para seleccionar la Ud de medida

Formulas empleadas 

1.- =SUM (Hoja 1 [Parcial Receta]) 
 El Total receta empleado en esta Tabla, seria sumando todas las recetas (Ya no los usaremos en esta ultima revisión realizada de la aplicación)

2.- Calcula el parcial de los elementos de la receta
 IF(([Ud medida] = "Ud"),([Costo Paquete] /([Peso/Ud Paquete] ))*(([Cant. Utili gr/ml]/1)),([Costo Paquete] /([Peso/Ud Paquete] ))*(([Cant. Utili gr/ml]/1000)))

Base de Datos Recetario de Cocina Google Sheet


Se puede colocar un filtro en la base de datos (tabla "Hoja 1"), para una vez introducido varias recetas distintas en la aplicación, solo seleccionar una de ellas según el nombre de la receta en la (tabla "Id") y obtener su costo.

Pantallas: Receta y Costo Total Receta


Formula IF(SI) empleada en todas las celdas de una hoja de Google Sheet Tabla "Receta", para filtrar las filas de la tabla que coincidan con la "Receta Nombre":

Columna A > =SI(('Hoja 1'!A2)=(Id!$B$2) ; ('Hoja 1'!A2); " ")

Columna B > =SI(('Hoja 1'!A2)=(Id!$B$2) ; ('Hoja 1'!B2); " ")
................. y así sucesivamente con todas las columnas de la Hoja

Formula empleada en la tabla Filtro para el Total de una Receta, dando anteriormente su nombre

=SUMAR.SI.CONJUNTO(('Hoja 1'!G2:G995);('Hoja 1'!A2:A995);"="&(Id!B2)) 



Entrada de productos con menú desplegable a la base de datos con las tablas Hoja1 y BaseProductos
conectadas (Producto TYPE =REF)


Calculadora desde la View Type table
 (Vista Tabla)



Las operaciones se realizan desde la misma vista tabla


La formula empleada para calcular los parciales es:
IFS([Opera]="S";[Nr1]+[Nr2];[Opera]="R";[Nr1]-[Nr2];[Opera]="M";[Nr1]*[Nr2];[Opera]="D";[Nr1]/[Nr2])

También se podría introducir esta función IFS desde la hoja de Google Sheet:
=IFS(D2="S";(B2+C2);D2="R";(B2-C2);D2="M";(B2*C2);D2="D";(B2/C2);D2="";"")



Acciones a introducir para editar y borrar en la tabla (Hay que crear una columna para Acción en la hoja de Google Sheet)


Para operar en la misma tabla tiene que estar activado Enable QuickEdit

He añadido el botón calculo del Precio del KG o Litro de un `Producto

Formula empleada;

([Coste Paquete]*1000)/[Gramos/Mililitros]







*******************************************************
ROBLOX STUDIO 🤖🕹️ Diciembre 2024



Roblox es una plataforma gratuita y en línea que permite crear, jugar y compartir experiencias inmersivas de cualquier temática, ofrece una amplia gama de experiencias de juego, que van desde aventuras de rol hasta simuladores y juegos de estrategia, creadas en su mayoría por los propios usuarios. El lenguaje de programación utilizado para el desarrollo de estos juegos es Lua, conocido por su simplicidad y potencia.

Roblox (Muy interesante) es también un juego multijugador gratuito online y social. Los usuarios pueden darle forma a sus mundos con piezas de diferentes tamaños y materiales. Es algo muy parecido a crear tus mundos y videojuegos con piezas de Lego, y luego puedes compartir tus creaciones con otros usuarios. Así, puede tanto dedicarte a jugar a los juegos creados por otros como a los tuyos propios.

🤖🕹️ Roblox Studio es la herramienta de creación de mundos y es independiente al juego, es una interfaz relativamente sencilla las herramientas avanzadas suficientes como para crear un mundo y tipo de partida a tu antojo. En ella incluso los más jóvenes pueden empezar a jugar con sus primeras nociones de programación para adaptar las funciones de cada pieza. 



2023

Para empezar descarga la versión Community de Visual Studio 2022 que es gratuita.

Descargar Visual Studio Tools: instalación gratuita para Windows, Mac, Linux (microsoft.com)

una vez instalada Visual Studio, se puede utilizar el ejecutable VisualStudioSetup.exe , para descarga otros módulos.

Si tienes instalado en el PC Windows 8.1 esta version 2022 no es compatible, descarga entonces Visual Studio 2015







Programa con la aplicación de Windows Form.Net (Agosto 2023)

Mi Programa de Calculadora Multiple 


Una vez diseñado las etiquetas y botones con el Design Form, abrimos la pestaña de programa y completamos el resto de las operaciones.

Usaremos la ventana de ListView como listado de las operaciones
El botón PPapel, guarda el contenido de las operaciones en el portapapeles (bloc de notas)

El botón C Borra la casilla N1 
Imports System.Windows.Forms.VisualStyles.VisualStyleElement

Public Class Form1
    Dim n1, n2, s As Double
    Dim n1t, n2t As String
    Private Sub btnsumar_Click(sender As Object, e As EventArgs) Handles btnsumar.Click

        If (txtn1.Text <> "") And (txtn2.Text <> "") Then

            Const val As String = "##,####.##"

            n1 = txtn1.Text
            n2 = txtn2.Text
            s = n1 + n2
            n1t = Format(n1, val)
            n2t = Format(n2, val)

            Lblr.Text = Format(s, val)

            ListView1.Items.Add(n1t & "+" & n2t & "=" & Lblr.Text & (vbCrLf))

            txtn1.Text = Lblr.Text
            txtn2.Text = "" '  borra la casilla N2
        Else
            MsgBox("Introduce un Numero ")
        End If

    End Sub
    Private Sub btnrestar_Click(sender As Object, e As EventArgs) Handles btnrestar.Click

        If (txtn1.Text <> "") And (txtn2.Text <> "") Then

            Const val As String = "##,####.##"

            n1 = txtn1.Text
            n2 = txtn2.Text
            s = n1 - n2
            n1t = Format(n1, val)
            n2t = Format(n2, val)

            Lblr.Text = Format(s, val)

            ListView1.Items.Add(n1t & "-" & n2t & "=" & Lblr.Text & (vbCrLf))

            txtn1.Text = Lblr.Text
            txtn2.Text = "" '  borra la casilla N2

        Else
            MsgBox("Introduce un Numero ")
        End If

    End Sub


    Private Sub btnmult_Click(sender As Object, e As EventArgs) Handles btnmult.Click

        If (txtn1.Text <> "") And (txtn2.Text <> "") Then

            Const val As String = "##,####.##"

            n1 = txtn1.Text
            n2 = txtn2.Text
            s = n1 * n2
            n1t = Format(n1, val)
            n2t = Format(n2, val)

            Lblr.Text = Format(s, val)

            ListView1.Items.Add(n1t & "*" & n2t & "=" & Lblr.Text & (vbCrLf))

            txtn1.Text = Lblr.Text
            txtn2.Text = "" '  borra la casilla N2
        Else
            MsgBox("Introduce un Numero ")
        End If

    End Sub

    Private Sub btndiv_Click(sender As Object, e As EventArgs) Handles btndiv.Click
        If (txtn1.Text <> "") And (txtn2.Text <> "") Then

            Const val As String = "##,####.##"

            n1 = txtn1.Text
            n2 = txtn2.Text
            s = n1 / n2
            n1t = Format(n1, val)
            n2t = Format(n2, val)

            Lblr.Text = Format(s, val)

            ListView1.Items.Add(n1t & "/" & n2t & "=" & Lblr.Text & (vbCrLf))

            txtn1.Text = Lblr.Text
            txtn2.Text = "" '  borra la casilla N2
        Else
            MsgBox("Introduce un Numero ")
        End If

    End Sub



    Private Sub ListView1_Click(sender As Object, e As EventArgs) Handles ListView1.Click

        ' ListView1.View = View.Details


    End Sub

    Private Sub BtnSalir_Click(sender As Object, e As EventArgs) Handles BtnSalir.Click
        Me.Close()
    End Sub

    Private Sub ListView1_SelectedIndexChanged(sender As Object, e As EventArgs) Handles ListView1.SelectedIndexChanged

    End Sub

    Private Sub Btncopia_Click(sender As Object, e As EventArgs) Handles Btncopia.Click

        Dim clip As String = ""

        'para que sea todos los elementos de tu listview

        Dim i As Integer

        For i = 0 To ListView1.Items.Count - 1

            'El anexo del Chr(9) es para agregar salto tipo tabulador en caso de querer pegar el contenido en una hoja de excel, si lo que quieres es que sea con                  salto de linea usa Chr(13)

            clip = clip & Chr(9) & ListView1.Items(i).Text.Trim & vbCrLf

        Next

        'Colocar el texto en el portapapeles


        My.Computer.Clipboard.SetText(clip)


    End Sub

    Private Sub BtlBorra_Click(sender As Object, e As EventArgs) Handles BtlBorra.Click
        txtn1.Text = ""

    End Sub

End Class


DataGridView en Windows Form. Net

Añadir, modificar y eliminar registros y operaciones

Mi aplicación usando el DataGrid (Agosto 2023)



El contenido se puede copiar en una hoja Excel, seleccionando todas las filas en el DataGrid con "Ctrl+C" y pegándolos después en la hoja de cálculo con "Ctrl+V". 
 Los números con decimales se cambiarán "." por "," para poder operar en la hoja de cálculo.





DataGridView Mis Gastos 
Lectura y grabado automático del archivo datos.txt, al entrar y salir de la aplicación.



Se ha añadido dos botones nuevos para operar con una calculadora especial diseñada por mí y un bloc de Notas, realizado también en Windows Forms.Net.
El botón Parciales (Sub rutina acumula) realiza la suma según la tipología de gasto realizado:
 "Al, Pe, Ga, Fa, Te, Oc Va, Re"

Imports System.IO
Imports System.Windows.Forms.VisualStyles.VisualStyleElement

Imports System.IO
Imports System.Windows.Forms.VisualStyles.VisualStyleElement

Public Class Form1
    Dim I, cont, it, FilaActual As Integer
    Dim n1, n2, n3, nr, Res, Total As Double
    Dim txt3 As String

    Private Sub btlentra_Click(sender As Object, e As EventArgs) Handles btlentra.Click

        n1 = Txt4.Text
        n2 = Txt5.Text

        n3 = n1 * n2

        Const val As String = "##,####.##"
        nr = Format(n3, val)
        Res = n3 + Res
        txt3 = ComboTipo.Text
        If txt3 = "" Then MsgBox("Falta introducir Tipo")
        If txt3 <> "" Then DgvDatos.Rows.Add(txt1.Text, txt2.Text, txt3, Txt4.Text, Txt5.Text, nr)
        Total = 0
        For I = 0 To ((DgvDatos.RowCount.ToString()) - 1) ' cuenta el número de filas del Datagrid

            Total = (DgvDatos.Item(5, I).Value) + Total
        Next

        Txtresult.Text = Format(Total, val)

    End Sub

    Private Sub btllimp_Click(sender As Object, e As EventArgs) Handles btllimp.Click
        txt1.Text = ""
        txt2.Text = ""
        REM txt3.Text = ""
        ComboTipo.DropDownStyle = ComboBoxStyle.DropDownList
        ComboTipo.SelectedIndex = 0
        Txt4.Text = 1
        Txt5.Text = ""
        txt1.Text = DateTimePicker1.Value.Date

    End Sub

    Private Sub btlsalir_Click(sender As Object, e As EventArgs) Handles btlsalir.Click
        Guardardatos()
        Application.Exit()
    End Sub

    Private Sub Btlmodificar_Click(sender As Object, e As EventArgs) Handles Btlmodificar.Click
        Dim txt3 As String
        txt3 = ComboTipo.Text
        If txt3 = "" Then MsgBox("Falta introducir Tipo")

        If txt3 <> "" Then DgvDatos.Item(0, DgvDatos.CurrentRow.Index).Value = txt1.Text
        If txt3 <> "" Then DgvDatos.Item(1, DgvDatos.CurrentRow.Index).Value = txt2.Text
        If txt3 <> "" Then DgvDatos.Item(2, DgvDatos.CurrentRow.Index).Value = txt3
        If txt3 <> "" Then DgvDatos.Item(3, DgvDatos.CurrentRow.Index).Value = Txt4.Text
        If txt3 <> "" Then DgvDatos.Item(4, DgvDatos.CurrentRow.Index).Value = Txt5.Text
        n1 = Txt4.Text
        n2 = Txt5.Text
        n3 = n1 * n2

        Const val As String = "##,####.##"
        nr = Format(n3, val)
        If txt3 <> "" Then DgvDatos.Item(5, DgvDatos.CurrentRow.Index).Value = nr


        ' MsgBox(DataGridView1.Item(5, 0).Value)  ' valor columna 5 en la fila 0

        ' MsgBox(DataGridView1.Item(5, DataGridView1.CurrentRow.Index).Value) ' valor columna 5 en la fila donde se esta modificando
        Total = 0
        For I = 0 To ((DgvDatos.RowCount.ToString()) - 1) ' cuenta el número de filas del Datagrid

            Total = (DgvDatos.Item(5, I).Value) + Total
        Next

        Txtresult.Text = Format(Total, val)
        REM  txt1.Text = DateTimePicker1.Value.Date

    End Sub



    Private Sub Datagridview1_CellClick(sender As Object, e As DataGridViewCellEventArgs) Handles DgvDatos.CellClick
        Dim i As Integer = DgvDatos.CurrentRow.Index

        txt1.Text = DgvDatos(0, i).Value
        txt2.Text = DgvDatos(1, i).Value
        txt3 = DgvDatos(2, i).Value
        ComboTipo.Text = txt3              REM asigna el valor del tipo actual al combobox, al pulsar en una fila
        Txt4.Text = DgvDatos(3, i).Value
        Txt5.Text = DgvDatos(4, i).Value

    End Sub


    Private Sub Btleliminar_Click(sender As Object, e As EventArgs) Handles Btleliminar.Click
        DgvDatos.Rows.Remove(DgvDatos.CurrentRow)

        Total = 0
        For I = 0 To ((DgvDatos.RowCount.ToString()) - 1)

            Total = (DgvDatos.Item(5, I).Value) + Total
        Next
        Const val As String = "##,####.##"
        Txtresult.Text = Format(Total, val)
        txt1.Text = DateTimePicker1.Value.Date

    End Sub





    Private Sub DgvDatos_CellDoubleClick(sender As Object, e As DataGridViewCellEventArgs) Handles DgvDatos.CellDoubleClick

        FilaActual = DgvDatos.CurrentRow.Index

        txt1.Text = DgvDatos.Rows(FilaActual).Cells("Column1").Value
        txt2.Text = DgvDatos.Rows(FilaActual).Cells("Column2").Value
        txt3 = DgvDatos.Rows(FilaActual).Cells("Column3").Value
        Txt4.Text = DgvDatos.Rows(FilaActual).Cells("Column4").Value
        Txt5.Text = DgvDatos.Rows(FilaActual).Cells("Column5").Value
        n3 = DgvDatos.Rows(FilaActual).Cells("Column6").Value

    End Sub

    Private Sub leerdatos()

        Dim archivo_leer As StreamReader
        archivo_leer = New StreamReader("./datos.txt")
        While Not archivo_leer.EndOfStream
            Dim cadena As String = archivo_leer.ReadLine
            Dim leer As String() = cadena.Split(New Char() {";"})
            DgvDatos.Rows.Add(leer)

        End While
        archivo_leer.Close()

        Total = 0
        For I = 0 To ((DgvDatos.RowCount.ToString()) - 1)
            Total = (DgvDatos.Item(5, I).Value) + Total
        Next
        Const val As String = "##,####.##"
        Txtresult.Text = Format(Total, val)
    End Sub


    Private Sub Guardardatos()              '   subrutina para guardar el archivo

        Dim archivo_escritura As StreamWriter
        Dim linea As String
        archivo_escritura = New StreamWriter("./datos.txt")
        With DgvDatos
            For I = 0 To .RowCount - 2

                linea = .Rows(I).Cells("Column1").Value & ";" &
                    .Rows(I).Cells("Column2").Value & ";" &
                    .Rows(I).Cells("Column3").Value & ";" &
                    .Rows(I).Cells("Column4").Value & ";" &
                    .Rows(I).Cells("Column5").Value & ";" &
                    .Rows(I).Cells("Column6").Value & ";"
                archivo_escritura.WriteLine(linea)
            Next
            MsgBox("Ok Archivo Guardado")
        End With
        archivo_escritura.Close()
    End Sub

    Private Sub AnadirDatos()
        Dim archivo_escritura = ("./datos.txt")

        Dim sw As StreamWriter
        Dim linea As String
        Dim fs As FileStream = Nothing

        sw = File.AppendText(archivo_escritura)

        With DgvDatos
            For I = 0 To .RowCount - 2

                linea = .Rows(I).Cells("Column1").Value & ";" &
                    .Rows(I).Cells("Column2").Value & ";" &
                    .Rows(I).Cells("Column3").Value & ";" &
                    .Rows(I).Cells("Column4").Value & ";" &
                    .Rows(I).Cells("Column5").Value & ";" &
                    .Rows(I).Cells("Column6").Value & ";"
                sw.WriteLine(linea)
            Next
            MsgBox("Guardado Ok")
        End With
        sw.Close()
    End Sub

    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        leerdatos()
        txt1.Text = DateTimePicker1.Value.Date
        Txt4.Text = 1
    End Sub

    Private Sub btlexe_Click(sender As Object, e As EventArgs) Handles btlexe.Click
        Dim obj As New Process
        obj.Start("C:\Users\jlsch\source\repos\WinFormsSumar\WinFormsSumar\bin\Debug\net6.0-windows\WinFormsSumar.exe", AppWinStyle.MaximizedFocus)

    End Sub

    Private Sub btlAcumula_Click(sender As Object, e As EventArgs) Handles btlAcumula.Click
        Dim tipo As String

        Dim nrAl As Double = 0
        Dim nrPe As Double = 0
        Dim nrGa As Double = 0
        Dim nrFa As Double = 0
        Dim nrTe As Double = 0
        Dim nrOc As Double = 0
        Dim nrVa As Double = 0     REM añadido nuevo acumulado
        Dim nrRe As Double = 0
        Dim filas As Integer
        DGView.Rows.Clear()   REM borra la fila del DGView para que deje entrar nuevos datos al recalcular

        filas = ((DgvDatos.RowCount.ToString()) - 1)
        REM MsgBox("Nr. filas=" & filas)

        For I = 0 To filas

            tipo = (DgvDatos.Item(2, I).Value)
            If tipo = "Al" Then nrAl = (DgvDatos.Item(4, I).Value) + nrAl
            If tipo = "Pe" Then nrPe = (DgvDatos.Item(4, I).Value) + nrPe
            If tipo = "Ga" Then nrGa = (DgvDatos.Item(4, I).Value) + nrGa
            If tipo = "Fa" Then nrFa = (DgvDatos.Item(4, I).Value) + nrFa
            If tipo = "Te" Then nrTe = (DgvDatos.Item(4, I).Value) + nrTe
            If tipo = "Oc" Then nrOc = (DgvDatos.Item(4, I).Value) + nrOc
            If tipo = "Va" Then nrVa = (DgvDatos.Item(4, I).Value) + nrVa
            If tipo = "Re" Then nrRe = (DgvDatos.Item(4, I).Value) + nrRe      REM añadido nuevo acumulado, revisa el tipo
        Next
        Const val As String = "##,####.##"
        DGView.Rows.Add(Format(nrAl, val), Format(nrPe, val), Format(nrGa, val), Format(nrFa, val), Format(nrTe, val), Format(nrOc, val), Format(nrVa, val), Format(nrRe, val))  REM añadido nuevo acumulado, tambien en el DGView



    End Sub


    Private Sub DGView_CellClick(sender As Object, e As DataGridViewCellEventArgs) Handles DGView.CellClick

        Dim nrAl, nrPe, nrGa, nrFa, nrTe, nrOc, nrVa, nrRe As Double REM añadido nuevo acumulado
        FilaActual = DGView.CurrentRow.Index

        nrAl = DGView.Rows(FilaActual).Cells("Column7").Value
        nrPe = DGView.Rows(FilaActual).Cells("Column8").Value
        nrGa = DGView.Rows(FilaActual).Cells("Column9").Value
        nrFa = DGView.Rows(FilaActual).Cells("Column10").Value
        nrTe = DGView.Rows(FilaActual).Cells("Column11").Value
        nrOc = DGView.Rows(FilaActual).Cells("Column12").Value
        nrVa = DGView.Rows(FilaActual).Cells("Column13").Value
        nrRe = DGView.Rows(FilaActual).Cells("Column14").Value   REM añadido nuevo acumulado, cambiar tambien nr. Columna (ver su nºen el Grid)

    End Sub

    Private Sub BtlNote_Click(sender As Object, e As EventArgs) Handles BtlNote.Click
        Dim obj As New Process
        obj.Start("C:\Users\jlsch\source\repos\WinFormsBlockNota\WinFormsBlockNota\bin\Debug\net6.0-windows\WinFormsBlockNota.exe", AppWinStyle.MaximizedFocus)
    End Sub

End Class




Bloc de Notas con la aplicación de Windows Form.Net

    Aplicación realizada, con instrucciones detalladas por Canal VB.NET


Imports System.Windows.Forms.VisualStyles.VisualStyleElement

Public Class Form1

    Private Sub Form1_Load(ByVal sender As Object, ByVal e As EventArgs) Handles MyBase.Load
        Try
            ComboBox1.Items.Clear()

            For Each fuentes As FontFamily In FontFamily.Families
                Dim tipo As String
                tipo = fuentes.Name
                ComboBox1.Items.Add(tipo)
            Next
            Try
                ComboBox1.Text = "Calibri"
            Catch ex As Exception
                ComboBox1.SelectedIndex = 0
            End Try
        Catch ex As Exception
        End Try
    End Sub

    Private Sub Panel1_Paint(sender As Object, e As PaintEventArgs) Handles Panel1.Paint

    End Sub
    Dim negrilla As Boolean = False
    Dim cursiva As Boolean = False
    Private Sub Label3_Click(sender As Object, e As EventArgs) Handles Label3.Click
        If negrilla = False Then
            RichTextBox1.SelectionFont = New Font(ComboBox1.Text, Int(TextBox1.Text), FontStyle.Bold)
            Label3.ForeColor = Color.Chocolate
            negrilla = True
        Else
            RichTextBox1.SelectionFont = New Font(ComboBox1.Text, Int(TextBox1.Text), FontStyle.Bold)
            Label3.ForeColor = Color.White
            negrilla = False
        End If
    End Sub

    Private Sub ComboBox1_DrawItem(sender As Object, e As DrawItemEventArgs) Handles ComboBox1.DrawItem
        e.DrawBackground()
        Dim texto As String = ComboBox1.Items(e.Index).ToString
        Dim fon As New Font(texto, e.Font.Size)
        e.Graphics.DrawString(texto, fon, New SolidBrush(e.ForeColor), e.Bounds.Left + 2, e.Bounds.Top + 2)
        e.DrawFocusRectangle()
    End Sub

    Private Sub Label4_Click(sender As Object, e As EventArgs) Handles Label4.Click
        Try
            If cursiva = True Then
                RichTextBox1.SelectionFont = New Font(ComboBox1.Text, Int(TextBox1.Text), FontStyle.Italic)
                Label4.ForeColor = Color.Chocolate
                cursiva = False
            Else
                RichTextBox1.SelectionFont = New Font(ComboBox1.Text, Int(TextBox1.Text), FontStyle.Regular)
                Label4.ForeColor = Color.White
                cursiva = True
            End If
        Catch ex As Exception
        End Try
    End Sub

    Private Sub TextBox1_TextChanged(sender As Object, e As EventArgs) Handles TextBox1.TextChanged
        Try
            If negrilla = True Then
                RichTextBox1.SelectionFont = New Font(ComboBox1.Text, Int(TextBox1.Text), FontStyle.Bold)

            Else
                RichTextBox1.SelectionFont = New Font(ComboBox1.Text, Int(TextBox1.Text), FontStyle.Regular)

            End If
        Catch ex As Exception
        End Try


    End Sub

    Private Sub PictureBox1_Click(sender As Object, e As EventArgs) Handles PictureBox1.Click

        Try
            Dim dlg As ColorDialog = New ColorDialog
            dlg.Color = RichTextBox1.SelectionColor

            If dlg.ShowDialog = System.Windows.Forms.DialogResult.OK Then
                RichTextBox1.SelectionColor = dlg.Color

                With RichTextBox1
                    .SelectionColor = dlg.Color
                End With
                PictureBox1.BackColor = dlg.Color
            End If
        Catch ex As Exception
        End Try
    End Sub

    Private Sub TrackBar1_Scroll(sender As Object, e As EventArgs) Handles TrackBar1.Scroll
        Label8.Text = TrackBar1.Value * 100 & "%"
        RichTextBox1.ZoomFactor = TrackBar1.Value
    End Sub

    Private Sub CopiarToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles CopiarToolStripMenuItem.Click
        RichTextBox1.Copy()
    End Sub

    Private Sub CortarToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles CortarToolStripMenuItem.Click
        RichTextBox1.Cut()
    End Sub

    Private Sub PegarToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles PegarToolStripMenuItem.Click
        RichTextBox1.Paste()
    End Sub

    Private Sub SeleccionarTodoToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles SeleccionarTodoToolStripMenuItem.Click
        RichTextBox1.SelectAll()
    End Sub

    Private Sub DeshacerToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles DeshacerToolStripMenuItem.Click
        RichTextBox1.Undo()
    End Sub

    Private Sub RehacerToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles RehacerToolStripMenuItem.Click
        RichTextBox1.Redo()
    End Sub

    Private Sub CopiarToolStripMenuItem1_Click(sender As Object, e As EventArgs) Handles CopiarToolStripMenuItem1.Click
        RichTextBox1.Copy()
    End Sub

    Private Sub CortarToolStripMenuItem1_Click(sender As Object, e As EventArgs) Handles CortarToolStripMenuItem1.Click
        RichTextBox1.Cut()
    End Sub

    Private Sub PegarToolStripMenuItem1_Click(sender As Object, e As EventArgs) Handles PegarToolStripMenuItem1.Click
        RichTextBox1.Paste()
    End Sub

    Private Sub SeleccionarTodoToolStripMenuItem1_Click(sender As Object, e As EventArgs) Handles SeleccionarTodoToolStripMenuItem1.Click
        RichTextBox1.SelectAll()
    End Sub

    Private Sub NuevoToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles NuevoToolStripMenuItem.Click
        RichTextBox1.Clear()
    End Sub

    Private Sub GuardarComoToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles GuardarComoToolStripMenuItem.Click
        Dim save As New SaveFileDialog()
        Dim myStreamwriter As System.IO.StreamWriter
        save.Filter = "tetx(* .txt)|*.txt|Html(*.html*)|*html|php(*.php)|*.php|all files(*.*)|*.*"
        save.CheckPathExists = True
        save.Title = "Guardar como"
        save.ShowDialog(Me)
        Try
            myStreamwriter = System.IO.File.AppendText(save.FileName)
            myStreamwriter.Write(RichTextBox1.Text)
            myStreamwriter.Flush()

        Catch ex As Exception

        End Try
    End Sub

   Private Sub AbrirToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles AbrirToolStripMenuItem.Click
    Dim Open As New OpenFileDialog()
    Dim myStreamReader As System.IO.StreamReader
    Open.Filter = "Texto[(* .txt)|*.txt|all files(*.*)|*.*"
    Open.CheckPathExists = True
    Open.Title = "Abrir Archivo"
    Open.ShowDialog(Me)
    Try
        Open.OpenFile()
        myStreamReader = System.IO.File.OpenText(Open.FileName)
        RichTextBox1.Text = myStreamReader.ReadToEnd()


    Catch ex As Exception

    End Try
End Sub

    Private Sub SalirToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles SalirToolStripMenuItem.Click
        End
    End Sub
    Dim estado As Integer = 0
    Private Sub RichTextBox1_SelectionChanged(sender As Object, e As EventArgs) Handles RichTextBox1.SelectionChanged
        Try

            ComboBox1.Text = RichTextBox1.SelectionFont.Name
            TextBox1.Text = RichTextBox1.SelectionFont.Size
            estado = RichTextBox1.SelectionFont.Style
            If estado = 0 Then
                Label3.ForeColor = Color.White
                Label4.ForeColor = Color.White
            ElseIf estado = 1 Then
                Label3.ForeColor = Color.Chocolate
                Label4.ForeColor = Color.White
            ElseIf estado = 2 Then
                Label3.ForeColor = Color.White
                Label4.ForeColor = Color.Chocolate
            End If
            PictureBox1.BackColor = RichTextBox1.SelectionColor
        Catch ex As Exception

        End Try
    End Sub

    Private Sub ComboBox1_SelectedIndexChanged(sender As Object, e As EventArgs) Handles ComboBox1.SelectedIndexChanged
        If negrilla = True Then
            RichTextBox1.SelectionFont = New Font(ComboBox1.SelectedItem.ToString, Int(TextBox1.Text), FontStyle.Bold)
        Else
            RichTextBox1.SelectionFont = New Font(ComboBox1.SelectedItem.ToString, Int(TextBox1.Text), FontStyle.Regular)
        End If
    End Sub
End Class


Abrir archivos EXE con Visual Basic

En Form1.vb(Diseño) utilizamos la herramienta Button a la que denominamos EXE, pulsamos doble Click y abrimos From1.vb

Public Class Form1 Private Sub btlexe_Click(sender As Object, e As EventArgs) Handles btlexe.Click Dim obj As New Process obj.Start("C:\Users\jlsch\source\repos\WinFormsSumar\WinFormsSumar\bin\Debug\net6.0-windows\WinFormsSumar.exe", AppWinStyle.MaximizedFocus) End Sub End Class

Abrir calculadora Free42
Private Sub btlexe_Click(sender As Object, e As EventArgs) Handles btlexe.Click Dim obj As New Process
obj.Start("C:\Program Files (x86)\Free42\Free42Decimal.exe", AppWinStyle.MaximizedFocus)
End Sub End Class









Programas con Visual Basic (Aplicación de Consola) (Agosto 2023)



Visual Basic (Consola)



Area de un cuadrado


Module Program

    Sub Main(args As String())

        Console.WriteLine("Escribe el valor de un radio")

        Dim radio As Double = Console.ReadLine()


        Dim area As Double = Math.PI * Math.Pow(radio, 2)


        Console.WriteLine("El area es " & area)


        Console.ReadLine()

    End Sub

End Module



Tabla de multiplicar


Imports System


Module Program

    Sub Main(args As String())

        Console.WriteLine("Escribe un numero")

        Dim numero As Integer = Console.ReadLine


        For i As Integer = 1 To 10


            Console.WriteLine(numero & " x " & i & " = " & numero * i)


        Next


        Console.ReadLine()

    End Sub

End Module



Iva de un producto


Module Program

    Sub Main(args As String())

        Const IVA As Double = 0.21


        Console.WriteLine("Escribe el valor de un producto")

        Dim producto As Double = Console.ReadLine


        Console.WriteLine("El IVA del producto es " & producto * IVA & " euros. El valor final es " & producto + (producto * IVA) & " euros")


        Console.ReadLine()

    End Sub

End Module




Visual Basic: Calculadora 


Imports System.Globalization Module Module1 Sub Main() Entrada: Console.WriteLine("N1? ") Dim num1 As Double = Console.ReadLine Console.WriteLine("N2? ") Dim num2 As Double = Console.ReadLine Console.WriteLine("+ - * / ? ") Dim tipo As Char = Console.ReadLine calculadora(num1, num2, tipo) GoTo Entrada End Sub Sub calculadora(num1 As Double, num2 As Double, tipo As Char) Select Case tipo Case "+" Console.WriteLine((num1 + num2).ToString("N", CultureInfo.InvariantCulture)) Case "-" Console.WriteLine((num1 - num2).ToString("N", CultureInfo.InvariantCulture)) Case "*" Console.WriteLine((num1 * num2).ToString("N", CultureInfo.InvariantCulture)) Case "/" Console.WriteLine((num1 / num2).ToString("N", CultureInfo.InvariantCulture)) Case Else Console.WriteLine("No operable") End Select End Sub End Module



Visual Basic: Introducir textos en un archivo


Imports System.IO Imports System.Text Module Module1 Sub Main() Dim path As String = "d:\VisualStudio\MiArchivo.txt" ' Crear y sobreescribir el archivo. Dim fs As FileStream = File.Create(path) Entrar: ' Añadir un texto al archivo. Console.WriteLine("Escribe un Texto? ") Dim Texto As String = Console.ReadLine If Texto = "" Then GoTo Final Dim info As Byte() = New UTF8Encoding(True).GetBytes(Texto) Dim espacio As Byte() = New UTF8Encoding(True).GetBytes(vbCrLf) ' salto de linea fs.Write(info, 0, info. Length) ' Escribe en el archivo
fs.Write(espacio, 0, espacio.Length) ' Escribe un salto de linea GoTo Entrar Final: fs.Close() End Sub End Module