Pues eso… haciendo pruebas con el conversor de C# a VB de Paul1956 comprobé que los discard de C# (asignación digamos que nula de una función o descartes según la traducción al español ) los generaba usando dos guiones bajo (undercore) y el «asistente» de VS indicó que creara una función para usar ese descarte. Y al ver que es válido usar el nombre __ (dos guiones bajos) como nombre de una función, pensé que también sería válido para una propiedad… de forma que se pudiese haccer ese tipo de asignación.
Por ejemplo, si tenemos este código de C# en el que se «descarta» el valor devuelto por la función MostrarAyuda:
classProgram
{
staticvoid Main(string[] args)
{
_ = MostrarAyuda(true, false);
//Console.WriteLine(_);
Console.WriteLine();
Console.WriteLine("Pulsa una tecla para finalizar.");
Console.ReadKey();
}
privatestaticstring MostrarAyuda(bool value1, bool value2)
{
var s = $"Valores: value1: {value1}, value2: {value2}";
Console.WriteLine(s);
return s;
}
}
La conversión podría quedar de esta forma:
PublicSharedSub Main(args AsString())
'__ = MostrarAyuda(True, False)
__ = MostrarAyuda(True, False)
Console.WriteLine(__)
Console.WriteLine()
Console.WriteLine("Pulsa una tecla para finalizar.")
Console.ReadKey()
EndSub
PrivateSharedProperty __ AsObject
PrivateSharedFunction MostrarAyuda(value1 AsBoolean, value2 AsBoolean) AsString
Dim s = $"Valores: value1: {value1}, value2: {value2}"
Console.WriteLine(s)
Return s
EndFunction
Es un apaño, pero puede valer para equiparar los dos lenguajes.
Nota: Fíjate que en VB al ser una propiedad válida la podemos usar como cualquier otra variable para mostrar el contenido.
Y esto es todo… a ver si lo implementa y así no dará error cuando se convierta código de C# que tenga ese tipo de asignación (que la implementaron en C# 7.0)
Nota del 10-dic-2020 01:04 GMT+1: La utilidad ha cambiado, para ver los cambios, te recomiendo que o bien los veas en GitHub o en la página de gsNotasNETF.
Nota: Esta es la entrada de esta utilidad, también existe una página con (casi) el mismo nombre para que aparezca en el menú de Utilidades NET>Utilidades con .NET Framework Pulsa aquí para ir a la página gsNotasNETF.
Esta utilidad sirve para escribir y guardar notas, agrupadas en grupos (o si lo prefieres, etiquetas). Cada grupo contendrá un número de notas (por ahora no hay un máximo de notas por grupo, pero si veo que el rendimiento es malo, tendré que limitarlo). Tampoco hay límite de grupos a crear, pero como dije antes, comprobaré el rendimiento y veré si es necesario hacer alguna limitación de número de grupos.
Esta utilidad está definida por un formulario que simplemente sierve de contenedor del control de usuario NotasUC que a su vez utiliza el control de usuario CabeceraNotasUC que es el que se encarga de mantener, guardar y leer la colección con los grupos y notas. El aspecto del control (en tiempo de diseño es el mostrado en la figura 1):
Figura 1. El control NotasUC en tiempo de diseño. Arriba está el control CabeceraNotaUC.
Figura 2. La aplicación de prueba, arriba las notas del grupo seleccionado, abajo el control NotasUC con las notas.
El formato que utiliza el fichero con las notas es lo que yo he llamado formato NotasUC que tiene el siguiente formato:
#Formato NotasUC - v1.0.0.0 - 05-dic-2020
#
# Fichero de Notas con formato NotasUC
#
# Contenido de gsNotasNETF.notasUC.txt
#
# Formato:
# G:Nombre del grupo 1
# Lista de notas del grupo 1, una en cada línea
# GFin: Fin de las notas del grupo 1
# G:Nombre del grupo 2
# Lista de notas del grupo 2, una en cada línea
# GFin: Fin de las notas del grupo 2
#
# Notas:
# No se guardan los grupos o notas que estén en blanco.
# Si la nota tiene estos caracteres, se hará un cambio al guardar el texto:
# Las comillas dobles se guardan como |quot|.
# El signo mayor > se guarda como |gt|.
# El signo mayor < se guarda como |lt|.
# El ampersand & se guarda como |A|.
# Si la cadena empieza con un espacio, se sustituye por |sp|.
# Los cambios de línea '\n\r' (CrLf) se guardan como |NL|.
# Los cambios de línea '\n' (Cr) se guardan como |CR|.
# Los retornos de carro '\r' (Lf) se guardan como |LF|.
# La comprobación se hace en este orden: CrLf, Cr, Lf
# Es para los casos que haya distintos cambios de línea (según el formato del fichero)
#
En GitHub he puesto el código fuente de esta utilidad que se puede usar como biblioteca dinámica para acceder a los dos controles definidos, aunque usando solo NotasUC es suficiente, ya que ahí se hace prácticamente todo el trabajo.
Pues eso… Este es un programa muy simple, bueno no tanto, lo que hace principalmente es mostrarte la fecha y la hora, actualizándose para que muestre los segundos, ¡es un reloj! ¡Pero aparte de la hora te muestro también la fecha hombre! 🙂
Nota: Esto no está repetido. Es que lo he creado primero como página y ahora como entrada. La página, a la que cambiaré el nombre, es para enlazarla en los proyectos de github, etc.
En el código que después te pondré, puedes ver qué es y cómo se puede utilizar como una especie de salvapantalla. Otra de las cosas que le he añadido es que puedas acoplar la pantalla tanto a la izquierda como a la derecha, pero en la parte superior. Cuando se acopla se puede hacer al tamaño que tiene la pantalla actualmente o bien hacerlo a un tamaño mucho más pequeño, todo eso es configurable por medio del menú de opciones. También puede que te interese en el código es que puedes mover la pantalla pulsando sobre la fecha o sobre la hora, además de, por supuesto, pulsando en la barra de título como en cualquier aplicación. Y, aunque no tiene mucho misterio, el que a la ventana se pueda cambiar el nivel de opacidad o transparencia. Te voy a pegar el texto que tengo en el menú de ayuda, acerca de, y así no me tengo que acordar de las cosas que le he ido añadiendo a esta aplicación.
El contenido de Acerca de:
Esta aplicación es un ‘simple’ reloj que te muestra la fecha y la hora en una ventana.
Te permite controlar dónde verla, si a tamaño normal, a tamaño pequeño, incluso puedes cambiar el tamaño a tu gusto.
Puedes hacer que esté encima del resto de ventanas.
Además puedes hacerla menos opaca (más transparente) para que pueda verse lo que hay debajo de la ventana.
El nivel de transparencia lo puedes controlar a tu gusto, desde casi totalmente transparente a totalmente opaca.
Puedes usarla también como una especie de salvapantallas (se va desplazando por la pantalla), pero con transparencia con idea de que veas lo que hay debajo sin tener que detener la aplicación.
Si quieres dejar de ver cómo se mueve por la pantalla, simplemente haz doble-clic en la fecha o en la hora.
El salvapantallas lo puedes usar a tamaño normal o en tamaño pequeño.
Cuando funciona como salvapantalla siempre está encima del resto de las ventanas y no muestra la barra de título.
La ventana la puedes mover desde la barra de título o bien manteniendo el ratón pulsado en la fecha o en la hora.
También puedes acoplarla en la parte superior izquierda o derecha, en esos casos, se cambia a tamaño mínimo y se hace transparente.
Y esto es casi todo… creo… en el menú de opciones (en el botón que hay abajo a la derecha) están todas las opciones de uso disponibles.
¡Disfrútala! 🙂
Capturas de la aplicación en funcionamiento
Aquí te muestro un par de capturas de la aplicación en modo normal y acoplada (que se muestra con transparencia).
Figura 1. Las opciones y cambiar la opacidad.
Figura 2. Acoplada en la parte superior izquierda (con transparencia)
Figura 3. Lista de las opciones del programa
El código no te lo voy a mostrar aquí, ya que son 680 líneas y no es plan… pero si podrás verlo en Github (ahora te pongo el enlace).
Este código por ahora está solo para C#, pero intentaré convertirlo para Visual Basic; cuando esté te avisaré o mejor aún, pásate por repositorio de Github y así podrás ver el código completo, de los dos lenguajes (recuerda que ahora mismo solo está el de C#).
El Documentos de Google pega el enlace con la descripción y todo… ¡mola! (cool!)
Este ha sido el segundo intento de usar la herramienta Dictado por voz, pero nada, a pesar de que en las sugerencias te dice que puedes decir punto y nueva línea, por ahora, de los signos de puntuación solo me ha reconocido el punto… en fin.
Y esto es todo… espero que te guste o al menos te sea de utilidad alguna parte del código.
Nos vemos. Guillermo
P.S. Sigo probando con C# y con Documentos de Google para ver si de una vez acaba entendiendo lo que digo 😉 (con el reconocimiento de voz o dictado por voz).