none
Manipulando un txt desde un list box (y ver los rows en otros text box) RRS feed

  • Pregunta

  • Hola, buenas tardes a todos. 
    tengo una serie de Text box, donde voy pidiendo datos al usuario. AL final obtengo la suma de todos esos datos como un string separado con un asterisco y lo escribo en un txt:

    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles agregaClientebutton.Click
    'variable que identifica linea arriba o abajo.
    Dim caselinea As Integer
    If (lineaArriba.Checked = True) Then
    caselinea = 1
    ElseIf (lineaAbajo.Checked = True) Then
    caselinea = 2
    End If
    Dim valor As String
    valor = nombretextbox.Text + "*" + linea1Txt.Text + "*" + linea2Txt.Text + "*" + retarTxt.Text + "*" + anchoTxt.Text + "*" + relojTxt.Text + "*" + caselinea.ToString
    MsgBox(valor)
    clienteListbox.Items.Add(valor)
    Dim file As System.IO.StreamWriter
    file = My.Computer.FileSystem.OpenTextFileWriter("C:\clientes.txt", True)
    file.WriteLine(valor)
    file.Close()

    End Sub

    Hasta ahí bien.
    Ahora pretendo que desde un listbox, haga seleccionando un registro se me rellenen de forma automática los text box del resto de la línea seleccionada.

    Si selecciono el cliente1, veo toda linea en cada uno de sus campos.

    Pero si selecciono el cliente 2, lo veo en un MSGbox de control, pero no en cada campo:

    Y además que si selecciono un registro en el listbox con objeto de borrarlo, los textbox de esa línea se queden vacios, y además desaparezca la linea seleccionada del txt sin dejar un salto de linea vacio.


    Nombre cliente es: nombretextbox
    Linea 1 es : linea1Txt


    End Sub

    Quiero ver en el List box, el nombre cliente, y seleccionandolo, se rellenen los text box con la infor que corresponda del txt.
    Y si quiero borrar, selecciono en el text box el nombre cliente, y se borre del txt y de los textbox

    la estructura que guardo en el txt es esta:
    CLIENTE 1*LINEA 1*LINEA 2*12*13*14*1
    CLIENTE 2*LAPIZ*PAPEL*10*9*10*2 
    Sé hacerlo usando una base de datos access, pero el cliente no tiene porque tener instalado access.

    miércoles, 9 de diciembre de 2015 16:09

Respuestas

  • Interesante la funcion Split, lo he conseguido !!

      Private Sub clienteListbox_DoubleClick(sender As Object, e As EventArgs) Handles clienteListbox.DoubleClick
            'doble clic cliente
            Dim a() As String, s As String
            Dim i As Integer
            Dim caselinea As Integer
            s = clienteListbox.SelectedItem
            a = Split(s, "*")
            For i = 0 To 6
                nombretextbox.Text = a(0)
                linea1Txt.Text = a(1)
                linea2Txt.Text = a(2)
                retarTxt.Text = a(3)
                anchoTxt.Text = a(4)
                relojTxt.Text = a(5)
                caselinea = a(6)
            Next i
            If caselinea = 1 Then
                lineaArriba.Checked = True
            ElseIf caselinea = 2 Then
                lineaAbajo.Checked = True
            End If
            MsgBox("Ha seleccionado el cliente" + Chr(13) + nombretextbox.Text, MsgBoxStyle.Information)
        End Sub

    jueves, 10 de diciembre de 2015 19:53

Todas las respuestas

  • "Jose Ramon Comin" escribió:

    >  pretendo que desde un listbox, haga seleccionando un registro se me rellenen
    > de forma automática los text box del resto de la línea seleccionada
    >
    > Y si quiero borrar, selecciono en el text box el nombre cliente, y se borre
    > del txt y de los textbox
    >
    > Sé hacerlo usando una base de datos access, pero el cliente no tiene porque
    > tener instalado access.

    Hola, José Ramón:

    Si conoces cómo se hace añadir, editar y eliminar registros de una tabla de Access, mejor será que los datos de los clientes los insertes en una base de datos de Access que hacerlo en un simple archivo de texto delimitado por el carácter *.

    Te hago saber que tu cliente no tiene por qué tener instalado el programa Microsoft Access; tan solo tiene que tener instalado su motor de datos. Por ejemplo, si el equipo de tu cliente reúne los requisitos para instalar los componentes de Access 2010, tan solo tienes que descargarlos e instalárselos a tu cliente:

    Componente redistribuible del motor de base de datos de Microsoft Access 2010

    ¿Que en lugar de Access deseas utilizar otro motor de datos diferente? Pues lo mismo, le tendrías que instalar al cliente los componentes necesarios para poder interactuar desde tu aplicación de Visual Basic .NET con la base de datos. Pero trabajar con un archivo de texto delimitado, como que no me parece lo más adecuado. ;-)

    Un saludo


    Enrique Martínez Montejo
            [MS MVP - VB]

    Nota informativa: La información contenida en este mensaje, así como el código fuente incluido en el mismo, se proporciona «COMO ESTÁ», sin garantías de ninguna clase, y no otorga derecho alguno. Usted asume cualquier riesgo al poner en práctica, utilizar o ejecutar lo recomendado o sugerido en el presente mensaje.

    Si esta respuesta le ha resultado útil, recuerde marcarla como satisfactoria.

    Si usas Visual Basic .NET y deseas ser productivo y feliz, se inteligente y activa la instrucción
    Option Strict.

    miércoles, 9 de diciembre de 2015 16:27
    Moderador
  • Hola.

    Nuestros clientes en muchos casos son pcs´en lineas de producción, bastante viejos y con pocas posibilidades.

    tenemos que basarnos en el uso y la gestión con ficheros txt.

    miércoles, 9 de diciembre de 2015 16:31
  • "Jose Ramon Comin" escribió:

    > Nuestros clientes en muchos casos son pcs´en lineas de producción,
    > bastante viejos y con pocas posibilidades.

    Salvo que como sistema operativo tengan MS-DOS, no veo yo donde está el problema. Si tienen instalado Windows XP o superior, no hace falta instalar ningún motor de datos de Access, porque el propio sistema operativo trae todo lo necesario para trabajar con bases de datos de Access 2000-2003, que siempre será mejor que trabajar con un archivo de texto delimitado como "base de datos".

    Y si tienen instalado Windows 95, 98 o NT, tan solo hay que instalar el motor Microsoft Jet:

    Service Pack 8 (SP8) de Jet 4.0 para Windows 95 / 98 / NT 4.0

    > tenemos que basarnos en el uso y la gestión con ficheros txt.

    No lo voy a poner en duda, pero desde luego, yo no voy a recomendar que alguien haga eso a estas alturas.

    Hace unos cuantos años escribí un artículo sobre el ISAM de texto del motor de base de datos Microsoft Jet, cuyos ejemplos están escritos utilizando código de Visual Basic clásico, aunque lo puedes adaptar perfectamente a Visual Basic .NET:

    Trabajar con los datos de un archivo de texto

    Te comento que para trabajar con el ISAM de texto también es necesario tener instalado algún motor de datos de Access, sea Microsoft Jet (Access 2000-2003) o Microsoft ACE (Access 2007 o superior), y te advierto que dicho ISAM no permite ni eliminar registros ni modificar los ya existentes; sólo permite añadir nuevos registros o filas.


    Enrique Martínez Montejo
            [MS MVP - VB]

    Nota informativa: La información contenida en este mensaje, así como el código fuente incluido en el mismo, se proporciona «COMO ESTÁ», sin garantías de ninguna clase, y no otorga derecho alguno. Usted asume cualquier riesgo al poner en práctica, utilizar o ejecutar lo recomendado o sugerido en el presente mensaje.

    Si esta respuesta le ha resultado útil, recuerde marcarla como satisfactoria.

    Si usas Visual Basic .NET y deseas ser productivo y feliz, se inteligente y activa la instrucción
    Option Strict.




    miércoles, 9 de diciembre de 2015 17:03
    Moderador
  • Hola Enrique, gracias por tus rápidas respuestas.

    Tengo que basarme en txt, there´s no other way my friend.

    miércoles, 9 de diciembre de 2015 17:15
  • "Jose Ramon Comin" preguntó:

    > Tengo que basarme en txt, there´s no other way my friend.

    Para trabajar con un archivo de texto delimitado como si se tratara de una base de datos de Access, SQL Server, MySQL, etc., que yo sepa, no hay ningún camino fácil.

    Me viene a la mente que podrías utilizar los archivos de acceso aleatorio que se utilizaban en BASIC. ;-)

    Manejo de Archivos en visual basic - parte 7

    Ni que decir tiene que tendrás que adaptar el código fuente a Visual Basic .NET.


    Enrique Martínez Montejo
            [MS MVP - VB]

    Nota informativa: La información contenida en este mensaje, así como el código fuente incluido en el mismo, se proporciona «COMO ESTÁ», sin garantías de ninguna clase, y no otorga derecho alguno. Usted asume cualquier riesgo al poner en práctica, utilizar o ejecutar lo recomendado o sugerido en el presente mensaje.

    Si esta respuesta le ha resultado útil, recuerde marcarla como satisfactoria.

    Si usas Visual Basic .NET y deseas ser productivo y feliz, se inteligente y activa la instrucción
    Option Strict.

    miércoles, 9 de diciembre de 2015 17:30
    Moderador
  • Interesante la funcion Split, lo he conseguido !!

      Private Sub clienteListbox_DoubleClick(sender As Object, e As EventArgs) Handles clienteListbox.DoubleClick
            'doble clic cliente
            Dim a() As String, s As String
            Dim i As Integer
            Dim caselinea As Integer
            s = clienteListbox.SelectedItem
            a = Split(s, "*")
            For i = 0 To 6
                nombretextbox.Text = a(0)
                linea1Txt.Text = a(1)
                linea2Txt.Text = a(2)
                retarTxt.Text = a(3)
                anchoTxt.Text = a(4)
                relojTxt.Text = a(5)
                caselinea = a(6)
            Next i
            If caselinea = 1 Then
                lineaArriba.Checked = True
            ElseIf caselinea = 2 Then
                lineaAbajo.Checked = True
            End If
            MsgBox("Ha seleccionado el cliente" + Chr(13) + nombretextbox.Text, MsgBoxStyle.Information)
        End Sub

    jueves, 10 de diciembre de 2015 19:53