none
variable public RRS feed

  • Pregunta

  • creo dos form, en form1 declaro una variable global - Public x as Integer - si quiero utilizarla en form2, porque se genera error siendo que fue declarada Public

    jueves, 28 de diciembre de 2017 0:51

Respuestas

  • Si declaras una variable pública en un formulario tienes que trabajar con ella mediante una instancia de ese formulario.
    Por ejemplo si tienes un Form2 con la variable Public x as integer y la quieres tratar desde Form1:

    Dim Formulario as New Form2
    Formulario.x = 5

    Mi pregunta es ¿Por qué usas esa variable pública en el formulario? Si se trata de una variable que se trata en toda la aplicación deberás declararla como pública pero en un módulo y si es un valor del formulario al que quieres acceder desde fuera del mismo puedes usar las propiedades :

    Public Class Form2

        Dim mX as Integer
        Public ReadOnly Property x As Integer
            Get
                Return mX
            End Get
        End Property

    ...

    De esta forma trabajas con una variable mX en el formulario Form2 y accedes a leer el valor de esta propiedad mediante la propiedad Form2.X

    En este ejemplo la propiedad se define como de solo lectura (ReadOnly). Si no se indica ReadOnly tendrá también el apartado 

    Set(value As Integer)
        mX = value
    End Set

    y podrás asignarle un valor haciendo Form2.X = 5 por ejemplo.


    Saludos, Javier J

    • Propuesto como respuesta Pablo Rubio jueves, 28 de diciembre de 2017 16:27
    • Marcado como respuesta Pablo Rubio lunes, 1 de enero de 2018 17:21
    jueves, 28 de diciembre de 2017 7:33
  • Hola:
    Posiblemente porque desde el Form2, no "VE" la instancia del Form1

    Crea un proyecto con 2 Form
    El Form1 tiene 1 Button, copia y pega el siguiente código

    Public Class Form1
        Public x As Integer

        Private Sub btnForm2_Click(sender As Object, e As EventArgs) Handles btnForm2.Click
            x = 10
            Using loForm As New Form2
                loForm.Padre = Me
                loForm.ShowDialog()
            End Using
        End Sub
    End Class

    Public Class Form2
        Public Property Padre As Form1
        Private Sub Form2_Load(sender As Object, e As EventArgs) Handles Me.Load
            Me.Text = "EL VALOR DE X ES:  " & Padre.x.ToString
        End Sub
    End Class

    Un saludo desde Bilbo
    Carlos
    jueves, 28 de diciembre de 2017 7:38

Todas las respuestas

  • Si declaras una variable pública en un formulario tienes que trabajar con ella mediante una instancia de ese formulario.
    Por ejemplo si tienes un Form2 con la variable Public x as integer y la quieres tratar desde Form1:

    Dim Formulario as New Form2
    Formulario.x = 5

    Mi pregunta es ¿Por qué usas esa variable pública en el formulario? Si se trata de una variable que se trata en toda la aplicación deberás declararla como pública pero en un módulo y si es un valor del formulario al que quieres acceder desde fuera del mismo puedes usar las propiedades :

    Public Class Form2

        Dim mX as Integer
        Public ReadOnly Property x As Integer
            Get
                Return mX
            End Get
        End Property

    ...

    De esta forma trabajas con una variable mX en el formulario Form2 y accedes a leer el valor de esta propiedad mediante la propiedad Form2.X

    En este ejemplo la propiedad se define como de solo lectura (ReadOnly). Si no se indica ReadOnly tendrá también el apartado 

    Set(value As Integer)
        mX = value
    End Set

    y podrás asignarle un valor haciendo Form2.X = 5 por ejemplo.


    Saludos, Javier J

    • Propuesto como respuesta Pablo Rubio jueves, 28 de diciembre de 2017 16:27
    • Marcado como respuesta Pablo Rubio lunes, 1 de enero de 2018 17:21
    jueves, 28 de diciembre de 2017 7:33
  • Hola:
    Posiblemente porque desde el Form2, no "VE" la instancia del Form1

    Crea un proyecto con 2 Form
    El Form1 tiene 1 Button, copia y pega el siguiente código

    Public Class Form1
        Public x As Integer

        Private Sub btnForm2_Click(sender As Object, e As EventArgs) Handles btnForm2.Click
            x = 10
            Using loForm As New Form2
                loForm.Padre = Me
                loForm.ShowDialog()
            End Using
        End Sub
    End Class

    Public Class Form2
        Public Property Padre As Form1
        Private Sub Form2_Load(sender As Object, e As EventArgs) Handles Me.Load
            Me.Text = "EL VALOR DE X ES:  " & Padre.x.ToString
        End Sub
    End Class

    Un saludo desde Bilbo
    Carlos
    jueves, 28 de diciembre de 2017 7:38