He puesto Option Explicit On a principio de código pero no me muestra ningún fallo.
Pero no estás activando la opción de los casteos ni desactivando la inferencia de types, solamente activaste la declaración explícita de variables.
Option Explicit On
' +
Option Strict On
Option Infer Off
Pruébalo de nuevo y verás de lo que te hablaba.

PD: Puedes activar por edefecto esas opciones para todos los proyectos/classes nuevos, en el menú
Tools -> Options -> Projects and Solutions -> VB Defaults de
Visual Studio.
También he visto que usas Shown en lugar de Load, ¿Cuál es la diferencia?
El evento
Form.Shown se dispara cuando la ventana del Form se muestra.
El evento
Form.Load se dispara cuando el Form se carga (esto ocurre antes de mostrar la ventana).
En el ejemplo de arriba lo usé por costumbre, nada relevante.
En cuanto a la librería de classes de .Net me gustaría que me dijeras como encontrar lo que busco cuando quiero hacer algo
Creo que no existe un artículo que especifique esos miembros equivalentes en la documentación de la MSDN, pero si que podemos encontrar esa tabla de miembros equivalentes en otras fuentes:
➢
Visual Basic 6 to .NET Function EquivalentsSi lo que buscas no está ahí entonces siempre puedes formular una pregunta en el foro y con gusto te ayudaré. (pero en otro post. No hagamos demasiado offtopic en este hilo)
con los miembros Microsoft.VisualBasic es fácil intuir como contruir el código, además que es muy directo.
Nombres intuitivos si, pero solo eso. De todas formas los miembros que están fuera de ese namespace también son intuitivos, simplemente los desconocerás, pero intuitivos te aseguro que si lo son.
La gente suele pensar que me quejo demasiado de este asunto en concreto, que no me tengo que obsesionar con tanta "perfección" en el rendimiento por que da igual usar un método u otro con argumentos como los que has expuesto de que "es más intuitivo" o etc, así que despues de esto no se ya que pensarán, pero bueno, supongo que es mi deber intentar defender los buenos hábitos de programación .Net xD.
Para empezar, si aprendes a usar
Microsoft.VisualBasic y te acostumbras a ello, en realidad no estás aprendiendo a usar .Net. Digamos que el Namespace
Microsoft.VisualBasic es cómo el lenguaje
Batch en programación, algo que está ahí, se le llama lenguaje, pero no se puede clasificar cómo lenguaje de programación realmente, pues eso mismo es el namespace
Microsoft.VisualBasic, está ahí por cuestiones de compatibilidad, se puede usar siempre que lo necesites, pero lo mejor sería no utilizarlo por que no lo necesitas.
Todo lo que existe en
Microsoft.VisualBasic es un código menos optimizado y son miembros con menos overloads (sustitutos). En resumen, la funcionalidad es más limitada.
Aparte, si vieras el código fuente (mediante reflection) verías que no es tan "directo" internamente hablando, hacen muchas vueltas y la mayoría de los métodos no se valen por si mismos así que en realidad son simples wrappers (gracias a dios) de los métodos optimizados de .Net, por ejemplo la función
Microsoft.VisualBasic.Strings.Mid() (entre otras) en realidad se limitan a hacer unas evaluaciones irrelevantes del argumento y seguidamente llama a
System.String.Substring(), vuelve a hacer las mismas evaluaciones del argumento (si. esto quiere decir que cuando llamas a
Mid y a toda esa otra morralla, trabajan innecesareamente x2) y por último devuelve el valor que tenga que devolver, es quien hace el trabajo de verdad.
Aquí puedes ver una referencia del código fuente de la librería de classes de .Net Framework:
➢
http://referencesource.microsoft.com/(creo que es una referencia
parcial)
Saludos