none
¿Como sería este DirectCast para que funcione correctamente? RRS feed

  • Pregunta

  • Tengo dos formularios y dependiendo de una condicion quiero asignar uno u otro:

    cNombre = if(nFormulario=1, "Formulario1", "Formulario2" )

    Formulario = DirectCast(Application.OpenForms.Item(cNombre), If(nFormulario = 1, form1, form2))

    El If no funciona, se supone que devuelve un tipo de dato: form1 o form2, algo falta allí.



    • Editado James-2016 jueves, 17 de marzo de 2016 5:51
    jueves, 17 de marzo de 2016 5:50

Respuestas

  • No, no puedes hacerlo así, el DirectCast no admite pasarle un string, necesita conocer en tiempo de compilación el tipo al que se hace el cast.

    Realmente, esa conversión es superflua. Si "formulario" es la clase madre de form1 y form2, entonces no se necesita el "cast", puedes asignar el valor de cualquiera de las hijas a la madre sin conversión:

    Formulario = cNombre

    El caso en el que se necesitaría el "cast" es el de que Formulario sea una clase hija de la otra que se convierte a ella. Pero en VB.NET no hay herencia múltiple, por lo que no puede ser clase hija tanto de form1 como de form2, solo de una de ellas (salvo el caso trivial de que form1 a su vez sea hija de form2). Y si no hay ninguna relación de herencia, entonces el cast no está permitido. Así que no puede darse el caso de que necesites el DirectCast condicional como estás intentando hacer.

    • Marcado como respuesta James-2016 viernes, 18 de marzo de 2016 3:27
    jueves, 17 de marzo de 2016 6:06

Todas las respuestas

  • No, no puedes hacerlo así, el DirectCast no admite pasarle un string, necesita conocer en tiempo de compilación el tipo al que se hace el cast.

    Realmente, esa conversión es superflua. Si "formulario" es la clase madre de form1 y form2, entonces no se necesita el "cast", puedes asignar el valor de cualquiera de las hijas a la madre sin conversión:

    Formulario = cNombre

    El caso en el que se necesitaría el "cast" es el de que Formulario sea una clase hija de la otra que se convierte a ella. Pero en VB.NET no hay herencia múltiple, por lo que no puede ser clase hija tanto de form1 como de form2, solo de una de ellas (salvo el caso trivial de que form1 a su vez sea hija de form2). Y si no hay ninguna relación de herencia, entonces el cast no está permitido. Así que no puede darse el caso de que necesites el DirectCast condicional como estás intentando hacer.

    • Marcado como respuesta James-2016 viernes, 18 de marzo de 2016 3:27
    jueves, 17 de marzo de 2016 6:06
  • Gracias.
    viernes, 18 de marzo de 2016 3:28