Guardar listview en archivo

Iniciado por SγиtαxEяяoя, 18 Julio 2013, 17:51 PM

0 Miembros y 7 Visitantes están viendo este tema.

SγиtαxEяяoя

Hola foro, estoy intentado hacer un programa que guarde mis contraseñas "Soy algo olvidadizo"  :silbar:


El - Necesito que aqui se guarden todos los cambios y que al abrir el programa los datos sigan hay guardados y cargados
Edito: Estoy atascado en esta parte
Quiero que al editar los nombres, contraseñas o el sitio web este lo guarde automaticamente, y al abrir el programa cargan los mismos datos que deje ya antes


Código (vbnet) [Seleccionar]

Dim saveFileDialog1 As New SaveFileDialog()

       saveFileDialog1.Filter = "txt files (*.txt)|*.txt|All files (*.*)|*.*"
       saveFileDialog1.FilterIndex = 2
       saveFileDialog1.RestoreDirectory = True

       If saveFileDialog1.ShowDialog() = DialogResult.OK Then
           Using sw As New IO.StreamWriter(saveFileDialog1.FileName, False)
               'write each row of the ListView out to a tab-delimited line in a file
               For i As Integer = 0 To Me.ListView1.Items.Count - 1
                   sw.WriteLine(((ListView1.Items(i).Text & vbTab) + ListView1.Items(i).SubItems(0).ToString() & vbTab) + ListView1.Items(i).SubItems(1).ToString())
               Next
           End Using
       End If

El Benjo

Bueno, la intención de tu aplicación es muy clara, vamos primero con el procedimiento de guardado.


  • Primero abrir un archivo predeterminado para el guardado de los campos.
  • Recorrer mediante un for los items en la lista y guardar sus subitems.
  • Cerrar el archivo abierto.

Código (vbnet) [Seleccionar]

Dim Contador As Integer
        FileSystem.FileOpen(1, "Nombre del archivo.extension", OpenMode.Output)
        For Contador = 0 To ListView1.Items.Count - 1
            FileSystem.PrintLine(1, ListView1.Items(Contador).SubItems(0))
            FileSystem.PrintLine(1, ListView1.Items(Contador).SubItems(1))
            FileSystem.PrintLine(1, ListView1.Items(Contador).SubItems(2))
        Next
        FileSystem.FileClose(1)


He detectado un error en tu código actual, la matriz "Añadir" se declara con 4 campos en vez de tres necesitas Declararla como "Dim Añadir(2) As String".

Ahora vamos con el código para eliminar los items. Aquí simplemente necesitas hacer uso de la propiedad ListView1.SelectedItems() y el método Remove() mediante otro For.

Con la opción de edición necesitarías hacerlo mediante un form que obtenga los valores de los subitems y los añada a unos campos de texto en el form, donde al cerrar el form se guarden los cambios.

Y para la opción de abrir la página necesitarías ser más específico en lo que quieres.

Por cierto, te paso la dirección para que descargues una aplicación que yo hice para ese mismo propósito. Es sólo el ejecutable, sin el código, pero puede ser que algunas de las opciones que trae te puedan dar ideas, como el hecho de que la aplicación incluye el cifrado de la información.

http://www.benjasoft.is-great.net/index.php?CargarP=Scripts/PHP/PHPAuto.php&ParPost=333&ArchReemplazar=DocumentosPagina/Auto_programa1.html&ArchVariables=Recursos/Aplicaciones/AutoDefiafer1Variables.txt

Al inicio de la aplicación te pedirá que introduzcas una contraseña, dejas el campo de texto vacío y le das en ingresar, porque al inicio la contraseña es nula, pero se la puedes cambiar desde la aplicación. Todo está en la ayuda en PDF que se adjunta en la descarga.  ;)

Otra cosa que se me olvidaba, deberás incluir una rutina que te cargue las claves al inicio de la aplicación.

Saludos
www.es.neftis-ai.com

Sí hay un mejor lenguaje de programación y es ese con el que puedes desarrollar tus objetivos.

SγиtαxEяяoя

Hola Benjo, gracias por responder pero mira este error que me da al tratar de guardar los datos


El Benjo

Ok, no me había fijado en eso, disculpa. Me faltó hacer referencia a la propiedad Text: "ListView1.Items(Contador).SubItems(0).Text". Creo que con eso debe de quedar.  :P
www.es.neftis-ai.com

Sí hay un mejor lenguaje de programación y es ese con el que puedes desarrollar tus objetivos.

SγиtαxEяяoя

#4
Bien, ahora estoy intentando algo como esto, algo simple no quiero complicarme tanto, ya que apenas estoy aprendiendo :)



Código (vbnet) [Seleccionar]

If TextUser.Text = "User123" Or TextPass.Text = "Password123" Then
           Form2.Show()
       Else
           MsgBox("Incorrect.")
       End If


Pero al poner "User" este automáticamente abre el "Form2"

Yo quiero, que se necesite poner el TextUser.Text y luego el TextPass.Text y hay si se pueda abrir el Form2

El Benjo

Es que has puesto Or en lugar de And. Es un error común, suele pasar.  :xD
www.es.neftis-ai.com

Sí hay un mejor lenguaje de programación y es ese con el que puedes desarrollar tus objetivos.

SγиtαxEяяoя

Como puedo validar la contraseña que he puesto en el "Form1" y en el "Form2" pueda cambiarla
Tengo esto en el "Form1"


Código (vbnet) [Seleccionar]

If TextUser.Text = "Test" And TextPass.Text = "123" Then
            Form2.Show()
            Me.Visible = False
        Else
            MsgBox("Incorrect.")
        End If


El usuario es "Text" y la contraseña es "123"

Tengo una opción dentro de otro "Form" en la que deseo cambiar la contraseña

Algo asi


Pero no se bien como hago el procedimiento

Esto es lo que trato de hacer

Código (vbnet) [Seleccionar]

If Form1.TextPass.Text = "123" Then
            NewPass.Enabled = True
            RNewPass.Enabled = True
            Form1.TextPass.Text = RNewPass.Text
            Form1.TextPass.Text = NewPass.Text
        Else
            NewPass.Enabled = False
            RNewPass.Enabled = False
        End If

z3nth10n

Intenta poniéndolo dentro de un Timer para que siempre lo compruebe en general ese code está bien.

Interesados hablad por Discord.

SγиtαxEяяoя

#8
Tengo el siguiente problema :-\ y no encuentro solucion alguna alguien me puede ayudar :p

[youtube=640,360]http://www.youtube.com/watch?v=YO-r-_6NElg[/youtube]




Código (vbnet) [Seleccionar]

If TxtUser.Text = "" Or TxtPass.Text = "" Then
           MessageBox.Show("Enter Credential")
           'ElseIf Not TextBox3.Text.Contains("https://") Or TextBox3.Text.Contains("http://") Then
           'MessageBox.Show("URL Invalid")
       ElseIf Not TxtUser.Text = "" Or TxtPass.Text = "" Then
           Dim row1 As String() = {TxtPass.Text, TxtWeb.Text}
           ListView1.Items.Add(TxtUser.Text).SubItems.AddRange(row1)
           Dim Add As New myObject()
           Add.Column1 = TxtUser.Text
           Add.Column2 = TxtPass.Text
           Add.Column3 = TxtWeb.Text
           listViewItems.Add(Add)
       End If
       TxtUser.Clear()
       TxtPass.Clear()
       TxtWeb.Clear()







Código (vbnet) [Seleccionar]

If ListView1.SelectedItems.Count > 0 Then
           ListView1.SelectedItems(0).Text = TxtUser.Text
           ListView1.SelectedItems(0).SubItems(1).Text = TxtPass.Text
           ListView1.SelectedItems(0).SubItems(2).Text = TxtWeb.Text
           Utilities.XMLSaver.SerializeToXML(listViewItems, ListViewItemsXml)
       End If


If ListView1.SelectedItems.Count > 0 Then
           TxtUser.Text = ListView1.SelectedItems(0).Text
           TxtPass.Text = ListView1.SelectedItems(0).SubItems(1).Text
           TxtWeb.Text = ListView1.SelectedItems(0).SubItems(2).Text
       End If







Código (vbnet) [Seleccionar]

If ListView1.SelectedItems.Count > 0 AndAlso MessageBox.Show("Do you want to delete this item?", "Confirm", MessageBoxButtons.YesNo) = Windows.Forms.DialogResult.Yes Then
           ListView1.SelectedItems(0).Remove()
       End If







Código (vbnet) [Seleccionar]

If TxtWeb.Text.Contains("https://") Or TxtWeb.Text.Contains("http://") Or TxtWeb.Text.Contains("www.") Then
           Process.Start(TxtWeb.Text)
       ElseIf TxtWeb.Text = "" Then
           MessageBox.Show("Invalid URL")
       End If







Código (vbnet) [Seleccionar]

Utilities.XMLSaver.SerializeToXML(listViewItems, ListViewItemsXml)



La cosa es que, al editar o borrar algun item, este no guarda los cambios en el XML

Este es el codigo

Código (vbnet) [Seleccionar]

Imports System.Collections.Generic
Imports System.Linq
Imports System.Text
Imports System.IO
Imports System.Xml
Imports System.Xml.Serialization
Namespace Utilities
Public NotInheritable Class XMLSaver
Private Sub New()
       End Sub
Public Shared Sub SerializeToXML(ListviewItems As List(Of myObject), path As String)
Dim serializer As New XmlSerializer(GetType(List(Of myObject)))
Dim textWriter As TextWriter = New StreamWriter(path)
serializer.Serialize(textWriter, ListviewItems)
textWriter.Close()
End Sub
Public Shared Function DeserializeFromXML(path As String) As List(Of myObject)
Dim deserializer As New XmlSerializer(GetType(List(Of myObject)))
Dim textReader As TextReader = New StreamReader(path)
Dim ListviewItems As List(Of myObject)
ListviewItems = DirectCast(deserializer.Deserialize(textReader), List(Of myObject))
textReader.Close()
Return ListviewItems
End Function
End Class
End Namespace

z3nth10n

En el primer code, tienes esto:

ElseIf Not TxtUser.Text = "" Or TxtPass.Text = "" Then

Por que no usas un Else?

Y aparte que errores tienes... No has dado nada más que codes :¬¬

Interesados hablad por Discord.