Visual Basic.NET - Modificar desde formulario2 datos del formulario 1

 
Vista:
sin imagen de perfil
Val: 5
Ha aumentado su posición en 2 puestos en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Modificar desde formulario2 datos del formulario 1

Publicado por empardopo (5 intervenciones) el 25/05/2020 08:26:08
Buenas a tod@s.

He declarado una estructura y array de de dicha estructura en mi formulario 1 en el que se inicializan los datos a unos valores predeterminados. Están declarados como Public (tanto la estructura como el array de estructuras).

El caso es que para modificar dichos valores por defecto, tengo creados unos textbox y cuando hago dobleclick sobre ellos me abre un formulario 2, donde aparecen unos textboxs con todos los campos de la estructura a modificar.

¿Cómo se podría hacer esto?

El caso es que desde el Formulario2, accedo a las variables poniendo Form1. delante y no obtengo error de sintaxis pero cuando ejecuto el proyecto obtengo un mega error , en concreto el siguiente:

System.InvalidOperationException: 'El formulario se hacía referencia así mismo durante la construcción a partir de una instancia predeterminada, lo que provocó una situación de recursividad infinita. Dentro del constructor de Form haga referencia al formulario mediante 'Me'.'

La verdad es que no sé como hacerlo...

La gran duda es como modificar desde el segundo formulario una variable creada en el primero.

Muchas gracias por anticipado
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Phil Rob
Val: 2.985
Oro
Ha mantenido su posición en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Modificar desde formulario2 datos del formulario 1

Publicado por Phil Rob (843 intervenciones) el 25/05/2020 09:18:35
Hola,

Generalmente, no encontramos problema para comunicar entre Forms.

Las herramients depuestas sobre un Form están Friend por defecto.Tus variables, procedimientos y funciones poden ser escritas Friend o Public.

En estes casos, los objectos de un Form están accesibles de donde otro Form cuando escribimos su nombre.

Ejemplo :

Soy en Form2 :
Form1.UnaTextBox.Text = MaVariable
UnVariable = Form1.UnaFuncion()

Soy en Form1 :
Form2.UnaVariableFriend = Me.ComboBox.Text
Form2.UnaVariableString = "Este es prueba"

Supongo que estes Forms existan en el Explorador de soluciones, y que están abiertos sin instanciation, solamente por Form1.Show o Form2.Show.

Espero que esta te ayudará
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Modificar desde formulario2 datos del formulario 1

Publicado por Nacho (56 intervenciones) el 25/05/2020 12:39:37
Pon el código y acabamos antes.

Una recursividad infinita se produce cuando llamas una función dentro de esa misma función sin ninguna condición. Pero también se produce cuando en una función que se llama al cambiar el valor de una variable cambias el valor de esa variable, y eso es lo que estás haciendo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
-1
Comentar
sin imagen de perfil
Val: 5
Ha aumentado su posición en 2 puestos en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Modificar desde formulario2 datos del formulario 1

Publicado por empardopo (5 intervenciones) el 25/05/2020 21:50:19
Pongo el código porque no doy con el problema...

Form1
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
Public Class Form1
 
    Public celdas(22, 32) As Celda
    Public apuntador As Integer
    Public TL(22, 32) As ToolTip
    Public Structure Celda
        Public cpFlash As Byte
        Public cpBright As Byte
        Public cpPaper As Byte
        Public cpInk As Byte
        Public cpCaracter As Char
 
    End Structure
 
    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        MessageBox.Show("Hola")
        'MessageBox.Show(celdas(0, 0).cpCaracter)
 
    End Sub
 
 
    Private Sub TextBox1_Click(sender As Object, e As EventArgs) Handles TextBox1.Click
 
        'TextBox1.Text = TextBox1.Text + TextBox1.SelectedText()
        TextBox1.SelectionStart = 0
        TextBox1.SelectionLength = TextBox1.Text.Length()
    End Sub
 
    Private Sub TextBox1_doubleClick(sender As Object, e As EventArgs) Handles TextBox1.DoubleClick
        TextBox1.SelectionStart = 0
        TextBox1.SelectionLength = TextBox1.Text.Length()
        Dim f3 As New Form3(apuntador)
        apuntador = 0
        f3.ShowDialog()
        TextBox1.Text = celdas(0, 0).cpCaracter
        TL(0, 0).SetToolTip(Me.TextBox1, "B " & celdas(0, 0).cpBright & ",F " & celdas(0, 0).cpFlash & ",P " & celdas(0, 0).cpPaper & ",I " & celdas(0, 0).cpInk & ",C " & celdas(0, 0).cpCaracter)
    End Sub
    Private Sub TextBox2_TextChanged(sender As Object, e As EventArgs) Handles TextBox2.TextChanged
        TextBox2.SelectionStart = 0
        TextBox2.SelectionLength = TextBox2.Text.Length()
        Dim f3 As New Form3(apuntador)
        apuntador = 1
        f3.ShowDialog()
        TextBox2.Text = celdas(0, 1).cpCaracter
        TL(0, 1).SetToolTip(Me.TextBox1, "B " & celdas(0, 1).cpBright & ",F " & celdas(0, 1).cpFlash & ",P " & celdas(0, 1).cpPaper & ",I " & celdas(0, 1).cpInk & ",C " & celdas(0, 1).cpCaracter)
    End Sub
 
 
 
    Private Sub inicializarTooltips()
        For fila = 0 To 21
            For columna = 0 To 31
                TL(fila, columna) = New ToolTip
                TL(fila, columna).IsBalloon = True
            Next
        Next
        TL(0, 0).SetToolTip(Me.TextBox1, "B " & celdas(0, 0).cpBright & ",F " & celdas(0, 0).cpFlash & ",P " & celdas(0, 0).cpPaper & ",I " & celdas(0, 0).cpInk & ",C " & celdas(0, 0).cpCaracter)
        TL(0, 1).SetToolTip(Me.TextBox2, "B " & celdas(0, 1).cpBright & ",F " & celdas(0, 1).cpFlash & ",P " & celdas(0, 1).cpPaper & ",I " & celdas(0, 1).cpInk & ",C " & celdas(0, 1).cpCaracter)
        TL(0, 2).SetToolTip(Me.TextBox3, "B " & celdas(0, 2).cpBright & ",F " & celdas(0, 2).cpFlash & ",P " & celdas(0, 2).cpPaper & ",I " & celdas(0, 2).cpInk & ",C " & celdas(0, 2).cpCaracter)
        TL(0, 3).SetToolTip(Me.TextBox4, "B " & celdas(0, 3).cpBright & ",F " & celdas(0, 3).cpFlash & ",P " & celdas(0, 3).cpPaper & ",I " & celdas(0, 3).cpInk & ",C " & celdas(0, 3).cpCaracter)
        TL(0, 4).SetToolTip(Me.TextBox5, "B " & celdas(0, 4).cpBright & ",F " & celdas(0, 4).cpFlash & ",P " & celdas(0, 4).cpPaper & ",I " & celdas(0, 4).cpInk & ",C " & celdas(0, 4).cpCaracter)
    End Sub
 
    Private Sub inicializarCeldas()
        For fila = 0 To 21
            For columna = 0 To 31
                celdas(fila, columna).cpBright = 0
                celdas(fila, columna).cpFlash = 0
                celdas(fila, columna).cpPaper = 7
                celdas(fila, columna).cpInk = 0
                celdas(fila, columna).cpCaracter = "B"
            Next
        Next
    End Sub
 
    Private Sub cargarCeldasEnTextbox()
        TextBox1.Text = celdas(0, 0).cpCaracter
        TextBox2.Text = celdas(0, 1).cpCaracter
        TextBox3.Text = celdas(0, 2).cpCaracter
        TextBox4.Text = celdas(0, 3).cpCaracter
        TextBox5.Text = celdas(0, 4).cpCaracter
        TextBox6.Text = celdas(0, 5).cpCaracter
        TextBox7.Text = celdas(0, 6).cpCaracter
        TextBox8.Text = celdas(0, 7).cpCaracter
        TextBox9.Text = celdas(0, 8).cpCaracter
        TextBox10.Text = celdas(0, 9).cpCaracter
        TextBox11.Text = celdas(0, 10).cpCaracter
        TextBox12.Text = celdas(0, 11).cpCaracter
        TextBox13.Text = celdas(0, 12).cpCaracter
        TextBox14.Text = celdas(0, 13).cpCaracter
        TextBox15.Text = celdas(0, 14).cpCaracter
        TextBox16.Text = celdas(0, 15).cpCaracter
        TextBox17.Text = celdas(0, 16).cpCaracter
        TextBox18.Text = celdas(0, 17).cpCaracter
        TextBox19.Text = celdas(0, 18).cpCaracter
        TextBox20.Text = celdas(0, 19).cpCaracter
        TextBox21.Text = celdas(0, 20).cpCaracter
        TextBox22.Text = celdas(0, 21).cpCaracter
        TextBox23.Text = celdas(0, 22).cpCaracter
        TextBox24.Text = celdas(0, 23).cpCaracter
        TextBox25.Text = celdas(0, 24).cpCaracter
        TextBox26.Text = celdas(0, 25).cpCaracter
        TextBox27.Text = celdas(0, 26).cpCaracter
        TextBox28.Text = celdas(0, 27).cpCaracter
        TextBox29.Text = celdas(0, 28).cpCaracter
        TextBox30.Text = celdas(0, 29).cpCaracter
        TextBox31.Text = celdas(0, 30).cpCaracter
        TextBox32.Text = celdas(0, 31).cpCaracter
    End Sub
    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles Me.Load
        'Dim celdas(22, 32) As Celda
        'apuntador = 0
 
        inicializarCeldas() 'Recordar que empiezan en 0 mientras que los textbox en 1 osea celdas(0,0)--> textbox1 .. celdas(0,31)--> textbox32
        inicializarTooltips() 'lo mismo que para celdas
        cargarCeldasEnTextbox()
 
 
    End Sub
 
 
End Class

Form3
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
Public Class Form3
    Private mapuntador As Integer
 
    Public Sub New(apuntador As Integer)
 
        ' Esta llamada es exigida por el diseñador.
        InitializeComponent()
        mapuntador = apuntador
 
 
        ' Agregue cualquier inicialización después de la llamada a InitializeComponent().
 
    End Sub
    Private Sub BtnCerrar_Click(sender As Object, e As EventArgs) Handles btnCerrar.Click
        Select Case mapuntador
            Case 0
                Form1.celdas(0, 0).cpBright = Val(txtBright.Text)
                Form1.celdas(0, 0).cpFlash = Val(txtFlash.Text)
                Form1.celdas(0, 0).cpPaper = Val(txtPaper.Text)
                Form1.celdas(0, 0).cpInk = Val(txtInk.Text)
                Form1.celdas(0, 0).cpCaracter = txtCaracter.Text
            Case 1
                Form1.celdas(0, 1).cpBright = Val(txtBright.Text)
                Form1.celdas(0, 1).cpFlash = Val(txtFlash.Text)
                Form1.celdas(0, 1).cpPaper = Val(txtPaper.Text)
                Form1.celdas(0, 1).cpInk = Val(txtInk.Text)
                Form1.celdas(0, 1).cpCaracter = txtCaracter.Text
        End Select
 
 
 
        Me.Close()
 
    End Sub
    Private Sub cargarValoresTextbox()
        Select Case mapuntador
            Case 0
                txtBright.Text = Form1.celdas(0, 0).cpBright
                txtFlash.Text = Form1.celdas(0, 0).cpFlash
                txtPaper.Text = Form1.celdas(0, 0).cpPaper
                txtInk.Text = Form1.celdas(0, 0).cpInk
                txtCaracter.Text = Form1.celdas(0, 0).cpCaracter
            Case 1
                txtBright.Text = Form1.celdas(0, 1).cpBright
                txtFlash.Text = Form1.celdas(0, 1).cpFlash
                txtPaper.Text = Form1.celdas(0, 1).cpPaper
                txtInk.Text = Form1.celdas(0, 1).cpInk
                txtCaracter.Text = Form1.celdas(0, 1).cpCaracter
        End Select
    End Sub
    Private Sub Form3_Load(sender As Object, e As EventArgs) Handles Me.Load
 
 
        cargarValoresTextbox()
    End Sub
End Class

Y el mensaje que daba es el que comentaba antes...

A ver si alguien ve algo raro.

Muchas gracias
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Phil Rob
Val: 2.985
Oro
Ha mantenido su posición en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Modificar desde formulario2 datos del formulario 1

Publicado por Phil Rob (843 intervenciones) el 25/05/2020 22:13:34
Hola,

Como dicho este mañana, si hay instanciation del Form, no ms funciona. En este caso, debe escribir un classe "Interface" que debe ser implementada por cada Form que utilizas. No tengo de ejemplo sobre este manera de trabajar.

Pero, quizá puedes trabajar de otra manera.

Por ejemplo, si escribo Form3 como esta :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
Public Class Form3
    Friend mapuntador As Integer   ' *** Private mapuntador As Integer
 
'    Public Sub New(apuntador As Integer)
 
 '       ' Esta llamada es exigida por el diseñador.
  '      InitializeComponent()
 '       mapuntador = apuntador
 
 
 '       ' Agregue cualquier inicialización después de la llamada a InitializeComponent().
 
 '   End Sub
' ... continuation ...
entonces en Form1, puedo escribir :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
' ...
    Private Sub TextBox1_doubleClick(sender As Object, e As EventArgs) Handles TextBox1.DoubleClick
        TextBox1.SelectionStart = 0
        TextBox1.SelectionLength = TextBox1.Text.Length()
  '      Dim f3 As New Form3(apuntador)
  '      apuntador = 0
  '      f3.ShowDialog()
Form3.mapuntador = 0
Form3.Show
        TextBox1.Text = celdas(0, 0).cpCaracter
        TL(0, 0).SetToolTip(Me.TextBox1, "B " & celdas(0, 0).cpBright & ",F " & celdas(0, 0).cpFlash & ",P " & celdas(0, 0).cpPaper & ",I " & celdas(0, 0).cpInk & ",C " & celdas(0, 0).cpCaracter)
    End Sub
    Private Sub TextBox2_TextChanged(sender As Object, e As EventArgs) Handles TextBox2.TextChanged
        TextBox2.SelectionStart = 0
        TextBox2.SelectionLength = TextBox2.Text.Length()
 '       Dim f3 As New Form3(apuntador)
 '       apuntador = 1
 '       f3.ShowDialog()
Form3.mapuntador = 1
Form3.Show
        TextBox2.Text = celdas(0, 1).cpCaracter
        TL(0, 1).SetToolTip(Me.TextBox1, "B " & celdas(0, 1).cpBright & ",F " & celdas(0, 1).cpFlash & ",P " & celdas(0, 1).cpPaper & ",I " & celdas(0, 1).cpInk & ",C " & celdas(0, 1).cpCaracter)
    End Sub
' ...

No es la sola manea de trabajar pero este es la sola que puedo te dar inmediatamente.

Espero que este te ayudará
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar