none
Una consulta sobre propiedades de formulario RRS feed

  • Pregunta

  • No me queda claro cómo funciona lo siguiente, suponiendo que declaro propiedades en un formulario:

    Public Class MiFormulario
        Property Texto As String

        Property Número As Integer

    En class

    ...y en el evento clic de un control de boton de otro formulario cualquiera declaro:

    Using forPrueba as MiFormulario

        forPrueba.Texto = "Un texto cualquiera"

        forPrueba.Número = 99

        forPrueba.ShowDialog <- En este punto no se inicializan Texto y Número nuevamente?

    End Using

    1º Suponiendo que dentro del Using no asigno valores a Texto y Número, cuando muestro el formulario, o sea al ejecutarse ShowDialog Texto sería "" y Número 0?

    2º ¿Al ejecutarse ShowDialog no se pierden los valores de Texto y Número asignados previamente?

    --------------

    Sé que se conservan los valores inicializados antes de ShowDialog pero no entiendo cómo así, les agradecería mucho que me aclaren cómo funciona, el porqué se mantienen esos valores.

    Ojalá se entienda lo que consulto.


    • Editado James-2016 jueves, 3 de noviembre de 2016 2:46
    jueves, 3 de noviembre de 2016 2:34

Respuestas

  • Hola James-2016,

    Antes de responder a tu preguntas, quiero mencionarte que en el using tendrías que crear la nueva instancia (usando la palabra reservada New), y evitar el uso de tíldes en las variables.

      Using forPrueba As New MiFormulario
             forPrueba.Texto = "Un texto cualquiera"
             forPrueba.Numero = 99
             forPrueba.ShowDialog()
      End Using

    [-] Pregunta 1

    Las propiedades tomarán los valores predeterminados de cada tipo. Si entras a la documentación de MSDN en cada tipo de dato encontrarás :

         

    Ojo! El Nothing no es lo mismo que un "" o String.Empty.

    String (Tipo de datos, Visual Basic)

    Integer (Tipo de datos, Visual Basic)

    [-] Pregunta 2

    No.

    Si te fijas lo que haces es crear una instancia de MiFormulario el cual por medio de ese objeto puedes acceder a sus atributos y/o métodos, es ahí donde le asignas los valores a las propiedades creadas. El showDialog() es una función, el cuál tiene como finalidad mostrar el formulario como un cuadro de diálogo y dependiendo del resultado puede ejecutar 'x' acción (Ya que es un función retorna un valor de tipo DialogResult). A diferencia de cuando usas Show() el cual es un método Sub (no retorna nada).

     Using forPrueba As New MiFormulario
         If forPrueba.ShowDialog = DialogResult.OK Then
               'Si el resultado fue ok
         End If
     End Using

    Y en el form MiFormulario, en algún botón :

    Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
      'Algún código ...
    
      'Asigno el resultado como Ok
       DialogResult = DialogResult.OK
    End Sub

    Espero me haya hecho entender.

    Saludos.


    JC NaupaCrispín
    Lima - Perú

    La magia no existe, la programación SI

    jueves, 3 de noviembre de 2016 4:07

Todas las respuestas

  • James-2016,

    La clase base Form y la clase derivada (formulario que diseñas) es una clase mas, no te esfuerces en verlo como algo especial o algo distinto.

    {?}-  Suponiendo que dentro del Using no asigno valores a Texto y Número, cuando muestro el formulario, o sea al ejecutarse ShowDialog Texto sería "" y Número 0?

    Es correcto, la definición de la propiedad asume un valor por defecto según el tipo de dato, muy distinto si tu decides establecer un valor por defecto, por ejemplo:

    Property Texto As String = "Mi texto"
    Property Numero As Integer = 5

    Queda claro que los valores por defecto se tomarán siempre y cuando no se haya establecido otro valor a las propiedades.

    {?}- ¿Al ejecutarse ShowDialog no se pierden los valores de Texto y Número asignados previamente?

    ¿Por qué habrían de perderse?. No veas a la clase que deriva de Form como algo distinto, complejo, no lo es. Cuando defines una clase y estableces propiedades no hay manera que un método cambie los valores, a menos -claro- que el método tenga alguna instrucción que asigne nuevos valores a las propiedades.


    Espero que la información proporcionada te haya sido de utilidad, quedo atento a tus comentarios.
    jueves, 3 de noviembre de 2016 4:05
  • Hola James-2016,

    Antes de responder a tu preguntas, quiero mencionarte que en el using tendrías que crear la nueva instancia (usando la palabra reservada New), y evitar el uso de tíldes en las variables.

      Using forPrueba As New MiFormulario
             forPrueba.Texto = "Un texto cualquiera"
             forPrueba.Numero = 99
             forPrueba.ShowDialog()
      End Using

    [-] Pregunta 1

    Las propiedades tomarán los valores predeterminados de cada tipo. Si entras a la documentación de MSDN en cada tipo de dato encontrarás :

         

    Ojo! El Nothing no es lo mismo que un "" o String.Empty.

    String (Tipo de datos, Visual Basic)

    Integer (Tipo de datos, Visual Basic)

    [-] Pregunta 2

    No.

    Si te fijas lo que haces es crear una instancia de MiFormulario el cual por medio de ese objeto puedes acceder a sus atributos y/o métodos, es ahí donde le asignas los valores a las propiedades creadas. El showDialog() es una función, el cuál tiene como finalidad mostrar el formulario como un cuadro de diálogo y dependiendo del resultado puede ejecutar 'x' acción (Ya que es un función retorna un valor de tipo DialogResult). A diferencia de cuando usas Show() el cual es un método Sub (no retorna nada).

     Using forPrueba As New MiFormulario
         If forPrueba.ShowDialog = DialogResult.OK Then
               'Si el resultado fue ok
         End If
     End Using

    Y en el form MiFormulario, en algún botón :

    Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
      'Algún código ...
    
      'Asigno el resultado como Ok
       DialogResult = DialogResult.OK
    End Sub

    Espero me haya hecho entender.

    Saludos.


    JC NaupaCrispín
    Lima - Perú

    La magia no existe, la programación SI

    jueves, 3 de noviembre de 2016 4:07
  • mm Ok, ShowDialog no cambia los valores, gracias.
    jueves, 3 de noviembre de 2016 15:29
  • Sí, tienes razón, me olvidé de poner el New para crear la instancia.

    mmm efectivamente los string se inicializan a Nothing, ahora que recuerdo anteriormente en alguna respuesta lo había leído.

    Se entendió perfectamente la explicación, lo que me estaba confundiendo es que pensaba que al ejecutar ShowDialog se ejecutaba todo el código del formulario desde el principio cuando en realidad lo que hace ShowDialog es mostrar el formulario como diálogo por eso es que las propiedades inicializadas previamente en el Using no son sobreescritas con los valores por defecto definidos en la propia clase que me imagino se inicializan en realidad al crear la instancia.

    Gracias, despejé la duda.

    jueves, 3 de noviembre de 2016 15:39