Visual Basic - La leche que parió al combobox...

Life is soft - evento anual de software empresarial
 
Vista:

La leche que parió al combobox...

Publicado por wtoniw (5 intervenciones) el 01/09/2005 20:21:23
El chiste está en que dada una serie de checkbox, al clicar en ellos me pasen el valor del índice que tienen a un combobox.
Con la rutina que adjunto no hay problema...., hasta que clico y desclico varias veces sobre los diferentes checksbox (en plan ozú que me equivoco muchas veces) y la cosa me peta: "Error en tiempo de ejecución. Llamada a procedimiento no válido".

Alguien sabe que carajo me está pasando?


If Check1(planta).Value = 1 Then
Combo3.AddItem planta
End If

If Check1(planta).Value = 0 Then
Combo3.RemoveItem planta
End If
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

RE:Código corregido

Publicado por Zoto (41 intervenciones) el 02/09/2005 15:50:47
Hola, wtoniw.

El error se produce a causa de lo siguiente:

Cuando checkeas uno de los CheckBox, se asigna el valor de su índice
como un elemento más del ComboBox.

El problema se encuentra al quitar el checkeo al CheckBox.
La instrucción que utilizas llama a eliminar el elemento con el índice
de planta, pero:

1-No sabes si el elemento con Indice planta tiene el valor planta
2-No sabes si el elemento con Indice planta existe

Es este último error el que hace soltar el MsgBox de error a Llamada de procedimiento no válido, puesto que se encuentra que el índice del elemento a eliminar no existe.

Para resolver este problema sería necesario disponer de un identificador propio
para cada elemento de la lista, uno que, al contrario de Index, no dependiera de su posición (ya que esta variará según se añadan o se eliminen otros elementos).

Tenemos 2 opciones:

1-Utilizar la propiedad List de los elementos (devuelve el valor que se muestra en
el ComboBox). Es una propiedad individual, puesto que solo habrá un valor 1, un valor 2, un valor 3... sin importar el orden en el cual aparezcan

2-Utilizar la propiedad ItemData de los elementos.
Tiene la misma funcionalidad que List, pero utilizando este se puede reservar
List para otros trabajos, quedando el ItemData para las operaciones de
añadir y eliminar y, dejando así modificar los valores mostrados sin
peligro de bugs en el programa.

Puede ser que no te hayas enterado de mucho, pero, con el código que te doy a continuación te será un tanto más fácil entenderlo.
Tan solo debes reemplazar el código:

If Check1(planta).Value = 1 Then
Combo3.AddItem planta
End If

If Check1(planta).Value = 0 Then
Combo3.RemoveItem planta
End If

Por el código:

'Se comprueba el estado del CheckBox
If Check1(planta).Value = 1 Then
'Si está checkeado, se añade un nuevo elemento con el valor planta
Combo3.AddItem planta
'Se añade también el valor planta a la propiedad ItemData del nuevo elemento para identificarlo
Combo3.ItemData(Combo3.NewIndex) = planta
Else
'Se recorre el ComboBox en busca de un elemento que tenga un ItemData coincidente con el valor planta
'Esto se podría hacer recurriendo al valor List del ComboBox, sin utilizar ItemData,
'pero de esta manera creo que queda un código más "encapsulado",
'puesto que más tarde es posible cambiar el valor de los elementos
'sin tener que modificar el código

For i = 0 To Combo3.ListCount - 1
If Combo3.ItemData(i) = planta Then Combo3.RemoveItem i: Exit Sub
Next i
End If

'---------------------------------------------------------

Perdón por el rollo, pero es que es propio de mi, sí, lo acepto, soy un plasta....

Espero que el código te ayude a resolver el problema con el maldito ComboBox...

Hasta otra,

Zoto
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

RE:Código corregido

Publicado por wtoniw (5 intervenciones) el 02/09/2005 20:10:47
Muchas gracias Zoto:

Bienaventurados los "plastas" como tú. Tu explicación ha sido clarísima y te agradezco "el rollo", ya que me resuelves la duda y algún que otro tic que tenía al programar.

Estoy en deuda contigo.

Wtoniw
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

RE:Código corregido

Publicado por Rubén (13 intervenciones) el 08/09/2005 11:32:50
Zoto, perdona pero no eres un plasta, eres una makina y has respondido exactamente a la duda q yo también tenia y que he encontrado aqui. Gracias mostro.
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