Visual Basic - combo1 agregar categorias sin que se repitan

Life is soft - evento anual de software empresarial
 
Vista:
sin imagen de perfil

combo1 agregar categorias sin que se repitan

Publicado por Julio (4 intervenciones) el 31/07/2025 12:24:51
Hola
tengo un problema que en el combo1 se visualizan todas las categorias que hay algunas categorias que se repiten
entre las que se repiten que solo tenga un item.
hay otro problema que a la hora de buscar una categoria que liste todos los productos de cada categoria

el codigo que tengo hasta ahora no lee la informacion de los productos de cada categoria.

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
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
' Declaración de variables
Dim archivo As Integer
Dim linea As String
Dim campos() As String
Dim producto As String
Dim categoriaActual As String
 
 
Private Sub Combo1_Click()
 
Dim fichero As Integer
    Dim linea As String
    Dim categoria As String
    Dim partes() As String
 
 
categoriaSeleccionada = Combo1.Text
 
 
 
    fichero = FreeFile
    Open App.Path & "\productos.txt" For Input As #fichero ' Reemplaza con la ruta correcta
    On Error Resume Next
    Do While Not EOF(fichero)
        Line Input #fichero, linea
        partes = Split(linea, ",") ' Suponiendo "," como separador
        If partes(1) = categoriaSeleccionada Then   ' Validar que se haya separado correctamente
            producto = partes(1)
            List1.AddItem producto
        End If
    Loop
 
    Close #fichero
 
End Sub
 
Private Sub leer()
 
 Dim fichero As Integer
    Dim linea As String
    Dim categoria As String
    Dim partes() As String
    Dim encontrado As Boolean
 
    fichero = FreeFile
    Open App.Path & "\productos.txt" For Input As #fichero ' Reemplaza con la ruta correcta
 
    Do While Not EOF(fichero)
        Line Input #fichero, linea
 
      partes = Split(linea, ",") ' Suponiendo "," como separador
        If UBound(partes) >= 0 Then ' Validar que se haya separado correctamente
           categoria = partes(0)
            Combo1.AddItem categoria
        End If
    Loop
 
    Close #fichero
 
 
 
End Sub
 
Private Sub Form_Load()
' Llama al evento click del botón para cargar el archivo
 leer
End Sub



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
sin imagen de perfil

combo1 agregar categorias sin que se repitan

Publicado por Julio (4 intervenciones) el 31/07/2025 12:28:37
informacion del archivo productos.txt


category1,product1,10.50
category2,product2,20.00
category3,product3,15.75
category4,product4,5.25
category5,product5,8.90



gracias
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 gilman
Val: 594
Bronce
Ha mantenido su posición en Visual Basic (en relación al último mes)
Gráfica de Visual Basic

combo1 agregar categorias sin que se repitan

Publicado por gilman (360 intervenciones) el 01/08/2025 11:35:09
Puedes usar la API SendMessage
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
'En la sección de declaraciones del formulario
Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Integer, ByVal lParam As Any) As Long
Private Const CB_FINDSTRINGEXACT As Long = &H158
'El procedimiento leer quedaría:
Private Sub leer()
 
    Dim fichero As Integer
    Dim linea As String
    Dim categoria As String
    Dim partes() As String
    Dim encontrado As Boolean
 
    fichero = FreeFile
    Open App.Path & "\productos.txt" For Input As #fichero ' Reemplaza con la ruta correcta
 
    Do While Not EOF(fichero)
        Line Input #fichero, linea
 
        partes = Split(linea, ",") ' Suponiendo "," como separador
        If UBound(partes) >= 0 Then ' Validar que se haya separado correctamente
            categoria = partes(0)
            If SendMessage(Combo1.hwnd, CB_FINDSTRINGEXACT, -1, categoria) < 0 Then
                Combo1.AddItem categoria
            End If
 
        End If
    Loop
 
    Close #fichero
End Sub
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
sin imagen de perfil

combo1 agregar categorias sin que se repitan

Publicado por Julio (4 intervenciones) el 01/08/2025 13:18:28
hola Val: 594
muchas gracias
el tema de leer la categoria funciona
ahora faltaria leer por categoria del combo1 y que visualize todos los pructos de dicha categoria



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
Private Sub Combo1_Click()
 
Dim fichero As Integer
    Dim linea As String
    Dim categoria As String
    Dim partes() As String
 
 
categoriaSeleccionada = Combo1.Text
 
 
 
    fichero = FreeFile
    Open App.Path & "\productos.txt" For Input As #fichero ' Reemplaza con la ruta correcta
    On Error Resume Next
    Do While Not EOF(fichero)
        Line Input #fichero, linea
        partes = Split(linea, ",") ' Suponiendo "," como separador
        If partes(1) = categoriaSeleccionada Then   ' Validar que se haya separado correctamente
            producto = partes(1)
            List1.AddItem producto
        End If
    Loop
 
    Close #fichero
 
End Sub


gracias
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
sin imagen de perfil
Val: 145
Ha aumentado 1 puesto en Visual Basic (en relación al último mes)
Gráfica de Visual Basic

combo1 agregar categorias sin que se repitan

Publicado por Sah1d Ra (202 intervenciones) el 05/08/2025 18:07:43
Saludos

me gustaría ayudar pero no entiendo la explicación de lo que pides,
puedes agregar captura de pantalla y un tanto mas de lo que ocupas?

cuando tengo una lista o combo y no quiero que se repita información
utilizo la siguiente validación:

1
2
3
4
5
6
7
8
9
10
11
Dim Respuesta as string
Dim Contenido as string
do while true
 respuesta = inputbox("elemento")
 if respuesta= "" then
  exit do
 elseif instr(contenido, respuesta+";")=0 then
  contenido = contenido + respuesta+";"
  combo1.additem respuesta
 end if
loop

algo asi quedaria para agregar elementos que no se repitan
aun que pensandolo te podria servir lo siguiente:

1
2
3
4
5
6
7
public function AgregaraCombo(Combox as ComboBox,Elemento as string)
 Dim Tempo as intteger
 for tempo = 0 to combox.listcount-1
  if combox.list(tempo) = elemento then exit for
 next tempo
 if tempo = combox.listcount then combox.additem elemento
end function

Felices lineas de programac10n.
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 Christian M
Val: 119
Ha disminuido 1 puesto en Visual Basic (en relación al último mes)
Gráfica de Visual Basic

combo1 agregar categorias sin que se repitan

Publicado por Christian M (13 intervenciones) el 03/12/2025 23:39:32
fijate que antes de cargar el combo utilizo una coleccion...

Private Sub leer()
Dim fichero As Integer
Dim linea As String
Dim partes() As String
Dim categoria As String
Dim categorias As Collection
Dim i As Long

Set categorias = New Collection

fichero = FreeFile
Open App.Path & "\productos.txt" For Input As #fichero

Do While Not EOF(fichero)
Line Input #fichero, linea
partes = Split(linea, ",")

If UBound(partes) >= 0 Then
categoria = Trim(partes(0))

' Evitar duplicados usando On Error Resume Next
On Error Resume Next
categorias.Add categoria, categoria
On Error GoTo 0
End If
Loop

Close #fichero

' Pasar la colección a un array para ordenar
Dim arr() As String
ReDim arr(1 To categorias.Count)

For i = 1 To categorias.Count
arr(i) = categorias(i)
Next i

' Ordenar alfabéticamente (burbuja simple)
Dim j As Long, temp As String
For i = 1 To UBound(arr) - 1
For j = i + 1 To UBound(arr)
If StrComp(arr(i), arr(j), vbTextCompare) > 0 Then
temp = arr(i)
arr(i) = arr(j)
arr(j) = temp
End If
Next j
Next i

' Cargar en el combo ya ordenado y sin duplicados
Combo1.Clear
For i = 1 To UBound(arr)
Combo1.AddItem arr(i)
Next i
End Sub

Private Sub Form_Load()
leer
End Sub
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