Visual Basic.NET - Guardar Valores de Multiples CheckBox en un solo campo

 
Vista:

Guardar Valores de Multiples CheckBox en un solo campo

Publicado por Fabian Rosas (1 intervención) el 18/11/2020 21:01:52
Tengo un Formulario con 180 CheckBox pero solo necesito guardar los q se marquen, para no tener q hacer una tabla con esa cantidad de variables para cada valor checkbox. He visto q en otros lenguajes se pueden guardar en un solo campo string separados por comas cada valor del check. Me pregunto si eso es posible tambien en Visual Basic y como hacerlo... ??? Gracias
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Phil Rob
Val: 3.353
Oro
Ha mantenido su posición en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Guardar Valores de Multiples CheckBox en un solo campo

Publicado por Phil Rob (1554 intervenciones) el 18/11/2020 22:55:01
Hola,

Porqué no una tabla de Byte ?

Ejemplo :

1
2
' Cuando tengo 180 CheckBox :
Dim MisValoresDeCheckBox((179) As Byte  ' Esta tabla es indiciada desde 0 hasta 179. Es decir 180 posiciones.

Una tabla de Byte puede ser escita en fichero binary en una sola opération :
1
Fichero.Write(TablaDeBytes, IndicioEnElTabla, CantidadDeByteAEscribir)

Una tabla de Byte puede ser leida desde le fichero binary en una sola opération :
1
Fichero.Read(TablaDeBytes, IndicioEnElTabla, CantidadDeByteALeer)

Sobre los CheckBox, es necesario de lo ordonnar para hacer relacione entre un CheckBox y el indicio en la tabla.
Por ejemplo, si los CheckBox estan depuestos en el Form, uno tras otro (no sé si dicho bien mi idea), los CheckBox estan llamados CheckBox1, CheckBox2, ..., CheckBox180, :

1
2
3
4
5
6
7
' Penso hacer una tabla de CheckBox para poder escribir  lo lineas siguiente en un bucle
MisValoresDeCheckBox(0) = (CType(CheckBox1.Checked = True), Byte)
'...
MisValoresDeCheckBox(179) = (CType(CheckBox180.Checked = True), Byte)
'...
'...
Fichero.Write(MisValoresDeCheckBox, 0, 180)

No tengo tiempo para hacer un modelo ahora, pero lo haré mañana ...

Buenas nochas ...
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Phil Rob
Val: 3.353
Oro
Ha mantenido su posición en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Guardar Valores de Multiples CheckBox en un solo campo

Publicado por Phil Rob (1554 intervenciones) el 19/11/2020 09:44:29
Hola,

Este un ejemplo completo.

Mira el video para ver como numerar los CheckBox de manera continua : https://www.dropbox.com/s/ljfy61dfvb1ize5/CopiarChkBox.mp4?dl=0

Este es el codigo :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
Public Class FChkBConFichero
 
    Dim RutaYNombreCompletoDelFichero As String = "MisCheckBox.Dat"
    Dim Fichero As System.IO.FileStream
 
    Dim CantidadDeCheckBox As Integer = 10  ' Este es posible de hacer contar por el programma
 
    Dim MisValoresDeLosCheckBox(CantidadDeCheckBox - 1) As Byte  ' Indicios cambiados desde 0 hasta 9 para este ejemplo con 10 ChkBox.
 
    Private Sub HacerTablaConCheckBox()
        For C As Integer = 0 To CantidadDeCheckBox - 1
            Dim NombreDelCheckBox As String = "CheckBox" & (C + 1) ' Supongo que los CheckBox se llaman "CheckBox" y estan numerotados desde 1 hasta CantidadDeCheckBox
            Dim ChkB As CheckBox = Controls(NombreDelCheckBox)
            MisValoresDeLosCheckBox(C) = IIf(ChkB.Checked, 49, 48) ' ASCII 48 es "0" y ASCII 49 es "1". Puedes utilizar ASCII 0 y ASCCI 1, entonces no estan visioble en NotePad.
        Next
    End Sub
 
' Si utiliza los caracteres ASCII 48 y 49, puedes los ver en el fichero con NotePad.
' Si utiliza los caracteres ASCII 0 y 1, el fichero parece vació.
 
    Private Sub PonerCheckBoxConTabla()
        For C As Integer = 0 To CantidadDeCheckBox - 1
            Dim NombreDelCheckBox As String = "CheckBox" & (C + 1)
            Dim ChkB As CheckBox = Controls(NombreDelCheckBox)
            ChkB.Checked = IIf(MisValoresDeLosCheckBox(C) = 49, True, False)  ' ASCII 48 es "0" y ASCII 49 es "1". Puedes utilizar ASCII 0 y ASCCI 1, entonces no estan visioble en NotePad.
        Next
    End Sub
 
    Private Sub LeerTablaEnElFichero()
        Fichero = New System.IO.FileStream(RutaYNombreCompletoDelFichero, System.IO.FileMode.Open, System.IO.FileAccess.Read)
        Fichero.Read(MisValoresDeLosCheckBox, 0, CantidadDeCheckBox)
        Fichero.Close()
    End Sub
 
    Private Sub EscribirTablaEnElFichero()
        Fichero = New System.IO.FileStream(RutaYNombreCompletoDelFichero, System.IO.FileMode.Create, System.IO.FileAccess.Write)
        Fichero.Write(MisValoresDeLosCheckBox, 0, CantidadDeCheckBox)
        Fichero.Close()
    End Sub
 
    Private Sub BGrabar_Click(sender As Object, e As EventArgs) Handles BGrabar.Click
        HacerTablaConCheckBox() ' Llenar con los valores actuales.
        EscribirTablaEnElFichero() ' Grabar los valores actuales.
    End Sub
 
    Private Sub BCargar_Click(sender As Object, e As EventArgs) Handles BCargar.Click
        LeerTablaEnElFichero()  ' Leer los valores del fichero.
        PonerCheckBoxConTabla() ' Poner los valores del fichero.
    End Sub
 
End Class

Que tenga un buen día ...

CopiarChk
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar