VB (ERROR)

Topic created · 13 Mensajes · 960 Visitas
  • Hola gente, tengo un error en VB que es bastante fastidioso y no encuentro solución
    Veamos, tengo 2 variables.

    Dim guardar As String = SaveFileDialog1.FileName
            Dim escribe As New System.IO.StreamWriter(guardar)
    

    If cajatexto2.Visible = False Then
    ahora bien. tengo varias cosas:
    cajatexto1 cajatexto2 y cajatexto3
    y quiero hacer esto si la cajatexto1 se ve pero las demás no:

    escribe.WriteLine("import app")
    escribe.close()
    

    (ESE VA BIEN)
    Luego tengo otro

    If cajatexto2.Visible = True Then
    escribe.writeline ("HOLA")
    escribe.close()
    

    tambien va bien
    pero ahroa tengo el error:

    If cajatexto1.Visible = True And cajatexto2.Visible = True Then
    escribe.WriteLine("")
                escribe.Close()
    

    Y ese me tira este error:

    El código de usuario no controló: ObjectDisposedException
    

    :S!?
    Y no me subraya nada en azul antes de iniciarlo, pero cuando hago esa acción, me tira ese error, se bloquea el programa y me lleva al VB señalándome esa linea
    ¿Cómo puedo hacer para que funcione normalmente?
    debería ir porque es sencillo
    Si X no se ve
    hacer una cosa
    Si X se ve
    Hacer otra diferente
    Si X se ve y A se ve
    hacer otra diferente a las demás
    pero claro, no rula y tengo sospecha de que sean las variables.
    He probado a poner una variable con nombre diferente para cada función pero sigue sin irme :S

    (Es para un savefiledialog, para que te lo guarde en un txt xD)

  • creo que sé por qué te pasa eso:
    tienes algo así:
    si A es false
    escribes y cierras

    si A es true
    escribes y cierras

    Si B es true y A es true
    escribes y cierras

    ¿cómo vas a escribir en el último caso si previamente has cerrado el streamwriter? SIEMPRE, al llegar a la tercera condición tendrás el streamwriter cerrado.

    ObjectDisposedException

    Objeto liberado, o borrado. Eso es lo que hace el close no? jeje

    prueba a no cerrar el writer hasta terminar de usarlo. Ciérralo al final del programa, o cuando tengas la certeza de que no va s avolver a usarlo más adelante.

  • Claro, pero ese es el problema, si no pongo un escribe.close() después de cada condicional, no me guarda el archivo, es decir, me lo guarda pero en blanco :S
    Ahí solo me guardaría la 3º condición, que sería
    Si B es true y A es true
    escribes y cierras.

  • Si pasa como en Java (por lo menos a mí me pasaba) al escribir en un archivo luego debes cerrar la conexión, pero la puedes cerrar inmediatamente después de escribir, o en cualquier momento, si no me equivoco lo puedes poner al final pase lo que pase...

    PD: en Java también había un método, creo que flush() que hacía que se guardara pero sin cerrar el flujo de datos...

  • En VB es AutoFlush, pero tiene que tener la variable delante y algo más detrás. Pero lo que me parece raro y que sigo sin comprender es que.
    Si A se ve
    Que haga algo
    Si A no se ve
    que haga otro
    Si A se ve y B no
    que haga otro distingo

    Por qué en el 2º sí me guarda el archivo, en el 1º también, pero en el 3º ya no?

  • Si no cierras no guarda. Pero yo no digo q no cierres, digo q cierres al final:

    If cajatexto2.Visible = False Then
    escribe.WriteLine("import app")
    End If
    
    If cajatexto2.Visible = True Then
    escribe.writeline ("HOLA")
    End If
    
    If cajatexto1.Visible = True And cajatexto2.Visible = True Then
    escribe.WriteLine("")
    End If
    
    escribe.Close()
    

    Eso tiene que funcionar.

  • Oh god! ES CIERTO
    si no usas condicionales no cierra, pero si usas cualquiera va al pie, se me olvidó por completo que las condicionales eran como "parentesis" en un texto jejejeje
    eres el amo, te debo una ;)!

  • :bah:

    (es spam, lo sé, pero el icono venía a huevo XD)
    por cierto, si más adelante necesitases escribir, también puedes redeclarar el streamwriter y dejarte de leches. La cosa es si conviene o no que el archivo se mantenga abierto. Si durante la ejecución del programa, quieres que se pueda acceder al archivo, entonces ciérralo siempre que puedas.
    Pero si no, ciérralo al final del código y punto.

  • @Hawkings said:

    Si pasa como en Java (por lo menos a mí me pasaba) al escribir en un archivo luego debes cerrar la conexión, pero la puedes cerrar inmediatamente después de escribir, o en cualquier momento, si no me equivoco lo puedes poner al final pase lo que pase...

    PD: en Java también había un método, creo que flush() que hacía que se guardara pero sin cerrar el flujo de datos...

    :|||:

    Forever alone

  • @Salvatore said:

    prueba a no cerrar el writer hasta terminar de usarlo. Ciérralo al final del programa, o cuando tengas la certeza de que no va s avolver a usarlo más adelante.

    es que anghios necesita ver las cosas 3 veces _xD_
    es coña, no te enfades jejeje