Componente VB

Estoy haciendo un componente en vb que consiste en una barra de 10 puntos, como diez option buttons que se puede marcar para dar una puntuación.
Puedes limitar el numero máximo y mínimo, y cuando limitas el máximo desaparecen los botones que no son válidos ;Si limitas el máximo a 8 los dos últimos punto se hacen invisibles y solo se pueden clickear los 8 primeros.
El problema es que cuando cambias el máximo y los puntos se hacen invisibles no se repinta bien el fondo detrás de los puntos y aparecen unos círculos del color del fondo del componente aunque este es transparente.Por ejemplo; el máximo por defecto es 10, si en ejecución lo cambias a 6 aparecen seis puntos clickeables y donde antes estaban los otros 4 aparecen cuatro puntos del color del componente. Si haces click en uno de los puntos visibles, los otros "puntos" que no deberían estar desaparecen y se ve lo que haya debajo. Si pones otro máximo, pasa lo mismo aparecen los puntos que deberían estar en el caso anterior, es decir si el máximo es 10 y pones máximo 8 salen 8 puntos y donde están los invisibles se ve el fondo del componente, si luego pones máximo 6, se ven 6 puntos normales, los puntos 9 y 10 desaparecen totalmente y los puntos 7 y 8 se ven del color de fondo del componente.
Creo que lo que pasa es que cuando se hacen invisibles los puntos el formulario en el que están ya se ha repintado o algo así y hay que forzar un nuevo repintado para que salga bien, si pones dos veces seguidas el mismo máximo a la segunda se ve bien.
Espero haberme explicado bien pero si no te puedo mandar el código del componente para que lo veas.
Gracias de antemano y si necesitas más detalles o aclaraciones dímelo. Se que es un poco confuso, si es necesario te puedo enviar el código y lo ves tu mismo.
1

1 respuesta

Respuesta
1
Parece un poco lioso aun así yo probaría dos cosas:
La propiedad del formulario autoredraw ponerla en true.
También probaría a refrescar el formulario me. Refresh y después a poner la instrucción doevents (a veces para refrescar un formulario hay que ponerla para darle tiempo al windows)
Otra cosa a parte de ocultar los botones yo también los desabilitaria (enabled = false)
Si ninguna de estas cosas funciona enviame el proyecto comprimido, con la version de vb y el sp que tienes instalado a:
[email protected]
Te envío el código a la dirección de correo que me dices.
Por otro lado te comento que la propiedad Autoredraw ya esta a true pero sigue igual, y estoy utilizando otro componente como botón, que consiste en dos controles shape circulares uno blanco y otro negro más pequeño, cuando haces click en el componente el circulo pequeño cambia de color.
Cuando recivas el mail (titulo: Duda Todoexpertos) abre el grupo de proyectos Grupo1.vbg, ahí están tanto los componentes como un proyecto normal donde esta el componente y un para de combos para cambiar el máximo y el mínimo, así como para refrescar el formulario. Prueba a cambiar el máximo y veras que siempre aparece como si el máximo actual fuera el anterior, y refrescar el formulario no funciona.
La version de VB es 6 y el SP es 6 tambien
Perdona por el retraso. Creo que ha dado con la solución en los métodos quita y pon del control dot añade la palabra doevents quedando como sigue:
Public Sub Pon()
Shape1.Visible = True
Shape2.Visible = True
DoEvents
End Sub
Public Sub Quita()
Shape1.Visible = False
Shape2.Visible = False
DoEvents
End Sub
Así el control tiene tiempo de refrescarse antes de continuar
Muchas gracias por la respuestas, y si crees que el control te puede valer eres libre de usarlo, pero si alguno de los dos nos hacemos ricos con el vamos al 50% ¿De acuerdo? ;) Gracias otra vez y perdón por el lio de pregunta.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas