Usuario
varios fallos de sintaxis

Pregunta
-
Buenas,
tengo un ejercicio que consiste en dos formularios, en el segundo formulario
se meten datos de una pelicula para que los reciba el datagridview del primer
formulario.Probado hacerlo desde el principio, para quitar los fallos que tenia, los que tengo ahora son:
- No se han declarado nombre titulo, director y genero, si los declaro da falloText no es miembro de String ¿Hace falta agregar algun namespace y cual?
- Text no es miembro de Runtime
- No se puede tener acceso a Form1.Private Sub CargaXML en este contexto xq es privado, lo he cambiado a publico y sigue el fallo
- He añadido Imports system.text.
El codigo es
Imports
System.IO
Imports
System.Xml
Imports
System.Reflection
Imports
System.Text 'sigue fallo
Public
Class FormAllta 'segundo formulario
Dim sReader As String
Private Sub FormAllta_FormClosing(ByVal sender As Object, ByVal e As System.Windows.Forms.FormClosingEventArgs) Handles Me.FormClosing
Form1.Show()
End Sub
Private Sub Label1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Label1.Click
End Sub
Private Sub FormAllta_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
sReader = (
My.Computer.FileSystem.CurrentDirectory) & "\movies.xml"
End Sub
Private Sub BTALTA1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles BTALTA1.Click
Dim movieXML As XDocument = XDocument.Load(sReader)
Dim attrAndValue As XElement = _
<Movie>
<Title><%= Titulo.Text %></Title>
<Director><%= Director.Text %></Director>
<Genre><%= Genero.Text %></Genre>
<ReleaseDate></ReleaseDate>
<RunTime><%= Runtime.Text %></RunTime>
</Movie>
movieXML.Root.Add(attrAndValue)
movieXML.Save(sReader)
End Sub
Private Sub bt2modificar_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles bt2modificar.Click
Dim xmldoc As XDocument = XDocument.Load(sReader)
Dim ql As XElement = (From ls In xmldoc.Root.Elements("Movie") _
Where CType(ls.Element("Title"), String).Equals("Dirty Harry") _
Select ls.Element("RunTime")).FirstOrDefault
ql.SetValue(
"333")
xmldoc.Save(sReader)
End Sub
Private Sub salir_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles salir.Click
Form1.CargaXML()
Form1.Show()
Me.Dispose()
End Sub
End
Class
- Cambiado Enrique M. Montejo jueves, 29 de septiembre de 2011 16:52 (De:Lenguaje VB.NET)
Todas las respuestas
-
hola
No se puede tener acceso a Form1.Private Sub CargaXML en este contexto xq es privado, lo he cambiado a publico y sigue el fallo
lo que veo es que estas usando el nombre de la clase Form1 para acceder al metodo, pero esto no se puede ya que es el nombre de la clase, no de su instancia
analzia estos articulos
Comunicar formularios de forma desacoplada
DataGridView – Parte 3 – Pasaje de informaci ó n entre grillas en distintos formularios
alli explico como comunicas el form hijo con su padre para enviar informacion entre ellos, como veras es necesario el uso de interfaces para desacoplar la comunicacion
en cambio si quieres pasa info del padre al hijo, se logra por medio del constructor de la clase o de propiedades
[WinForms] – Pasaje de informaci ó n formulario hijo
No se han declarado nombre titulo, director y genero, si los declaro da falloText no es miembro de String ¿Hace falta agregar algun namespace y cual?
esta parte no la entendi, esos titulo, director, etc que veo usas en el xml, y que van acompañador del .Text, son controles del formulario local, o son controles del Form1 ?
porque pareciera como que no estan estos controles definidos en la pantalla
Nota: cuando pegues codigo en el post del foro valida que tenga una identacion correcta para facilitar la lectura, es preferible que tenga una buena identacion a color, puede editar el post para arreglar el codigo puesto, es mas si estas copiando directo del VS, pasa primero el codigo por el notepad para quitar el formato
saludos
Leandro Tuttini
Blog
Buenos Aires
Argentina -
Hola Leandro,
Los nombres de titulo, director y genero son controles del segundo formulario, son los nombres de las etiquetas y de los textbox y un combobox.
En la parte de No se puede tener acceso a Form1.Private Sub CargaXML en este contexto xq es privado, todavia no he mirado los linq con tranquilidad, cuando les eche el vistazo te cuento
-
hola
claro entonces necesitas de la instancia de tu otro formulario para poder acceder a estos controles
lo que comentaba es que el form hijo le pases por propidades (o en el constructor) la info de formulario padre, o sea los valores de estos controles de texto y combo
de esta forma no necesitarias acceder a estos en el otro formulario, has revisado este link
[WinForms] – Pasaje de informaci ó n formulario hijo
alli explico como hacerlo, aplicando esta tecnica pasarias los valores al form hijo para armar el xml, sin necesidad de acceder a lo controles del otro form
saludos
Leandro Tuttini
Blog
Buenos Aires
Argentina -
-
Hola,
He hecho los dos ejemplos de uso de constructor link, los dos m dan fallos. M falta probar los ejemplos de uso de propiedades. En estos ejemplos uno de ellos lo indica en la parte de codigo generada automaticamente
[WinForms] – Pasaje de informaci ó n formulario hijo
En mi codigo he declarado form1 como variable global, el fallo de acceso se ha quitado, ahora da CargaXML no es miembro de System.Windows.Forms.Form, he añadadido este namespace y sigue dando el fallo
-
hola
cuando invocas al metodo CargarXml() lo haces a la instancia correcta del formulario, o sea la instancia es del tipo de formulario donde has declarado ese metodo ?
o es uns instancia generica del tipo Form ?
por ahi si pones la linea del codigo donde da el fallo se pueda analizar
saludos
Leandro Tuttini
Blog
Buenos Aires
Argentina -
-
Hola,
Todavia no he podido solucionar los fallos.
En los fallos de nombres no declarados, <%=Titulo.Text%>, si pongo <Titulo.Text> o <xml=tittulo.text>, dan fallo se espera nombre XML
Os mando el codigo donde he declarado form1 y donde da el fallo
Public Class FormAllta 'segundo formulario
Dim sReader As String
Dim Form1 As New Form()Private Sub salir_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles salir.Click
Form1.CargaXML() 'DA FALLO
Form1.Show()
Me.Dispose()
End Sub -
hola
per no puedes hacer esto
Dim Form1 As New Form()
no estas indicando ningun nombre de formulario, sino que crear la instancia de un form base, este no tiene la declaracion del metodo
usa el nombre del formulario concreto donde has definido a CargaXML(), quizas
Dim frm1 As New Form1()
frm1.CargaXML()
saludos
Leandro Tuttini
Blog
Buenos Aires
Argentina -
Hola,
He probado el codigo q pones y da fallo No se puede tener acceso a Form1.Private Sub CargaXML en este contexto xq es privado
Cual es la diferencia entre lo q pones tu y mi codigo?
T mando los codigos de los 2 formularios
- Codigo Form1
Imports System.IO
Imports System.Xml
Imports System.ReflectionPublic Class Form1 'primer formulario
Public Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
Me.CargaXML()
End SubPrivate Sub BotonAlta1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles BotonAlta1.Click
Me.Hide()
FormAllta.Show()
End Sub
Private Sub CargaXML()
Dim sReader As String = (My.Computer.FileSystem.CurrentDirectory) & "\movies.xml"
Dim movieXML As XElement = XElement.Load(sReader)
Dim query = From m In movieXML.Elements("Movie") _
Select New With { _
.Titulo = CStr(m.Element("Title")), _
.Director = CStr(m.Element("Director")), _
.Genero = CInt(m.Element("Genre")), _
.Runtime = CInt(m.Element("RunTime")) _
}
DataGridView1.DataSource = query.ToList()DataGridView1.Refresh()
End Sub
End Class- Codigo FormAllta
Imports System.IO
Imports System.Xml
Imports System.Reflection
'Imports System.Text 'sigue fallo
'Imports System.Data.Linq.Mapping
'Imports System.Windows.Forms.FormPublic Class FormAllta 'segundo formulario
Dim sReader As String
Dim Form1 As New Form()
Private Sub FormAllta_FormClosing(ByVal sender As Object, ByVal e As System.Windows.Forms.FormClosingEventArgs) Handles Me.FormClosing
Form1.Show()
End SubPrivate Sub Label1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Label1.Click
End Sub
Private Sub FormAllta_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
sReader = (My.Computer.FileSystem.CurrentDirectory) & "\movies.xml"
End SubPrivate Sub BTALTA1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles BTALTA1.Click
Dim movieXML As XDocument = XDocument.Load(sReader)
Dim attrAndValue As XElement = _
<Movie>
<Title><%= Titulo.Text %> ></Title>
<Director><%= Director.Text %></Director>
<Genre><%= Genero.Text %></Genre>
<ReleaseDate></ReleaseDate>
<RunTime><%= Runtime.Text %></RunTime>
</Movie>
movieXML.Root.Add(attrAndValue)
movieXML.Save(sReader)
End SubPrivate Sub bt2modificar_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles bt2modificar.Click
Dim xmldoc As XDocument = XDocument.Load(sReader)
Dim ql As XElement = (From ls In xmldoc.Root.Elements("Movie") _
Where CType(ls.Element("Title"), String).Equals("Dirty Harry") _
Select ls.Element("RunTime")).FirstOrDefault
ql.SetValue("333")
xmldoc.Save(sReader)
End SubPrivate Sub salir_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles salir.Click
Form1.CargaXML()
Form1.Show()
Me.Dispose()
End Sub
End Class