none
varios fallos de sintaxis RRS feed

  • 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

    domingo, 8 de agosto de 2010 0:49

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
    domingo, 8 de agosto de 2010 1:14
  • 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

     

     

    lunes, 9 de agosto de 2010 17:11
  • 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
    lunes, 9 de agosto de 2010 17:20
  • Hola,

    he leido los links q dices, m falta comparar los codigos a ver si saco ideas de donde esta el fallo

    miércoles, 11 de agosto de 2010 19:48
  • 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

    domingo, 15 de agosto de 2010 10:50
  • 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
    domingo, 15 de agosto de 2010 15:06
  • hola ,

    cuentanos ,  has podido solucionar tu problema ?

     

    enmanuel grullard

    republica dominicana

     

    domingo, 15 de agosto de 2010 18:13
  • 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

     

     

     

    martes, 17 de agosto de 2010 17:07
  • 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
    martes, 17 de agosto de 2010 17:20
  • 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.Reflection

    Public Class Form1 'primer formulario
        Public Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
            Me.CargaXML()
        End Sub

        Private 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.Form

    Public 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 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

     

    jueves, 19 de agosto de 2010 18:32