Control.Add cambia la ubicación de los controles

Esto va a ser difícil de explicar.

Así es como funciona mi control personalizado:

  1. Hice una vista de lista personalizada que contiene un ContainerControl y un VScrollBar
  2. Los elementos en la vista de lista se agregan a ContainerControl, en un movimiento de desplazamiento, los elementos se reubican en ContainerControl.

Esa es la idea básica de una vista de lista personalizada.

Ahora: Cada ListviewItem tiene una altura de 111 y funciona de maravilla. Hasta que agrego exactamente 295 artículos, los artículos después de esos obtienen algunas cosas extrañas.

Cada ListviewItem contiene algo como un cuadro de imagen, una barra de progreso, etiquetas, algunos botones y alguna pintura personalizada en el evento Paint.

Ahora todo lo que se pinta en ListviewItems (en el evento Paint) se coloca correctamente. Sin embargo, algunos (!) de los controles que se agregan con Controls.Add() no lo son, parecen obtener un valor Y negativo.

Cuando configuro un punto de interrupción después de SomeControl.Location = new Point(x, y), el control tiene el valor correcto, pero después de agregar el control a ListviewItem con Controls.Add(), el valor de Y es negativo. La parte más extraña es que algunos controles no entienden esto, esta podría ser una forma de solucionar este problema.

Realmente espero que puedas entender lo que estoy tratando de averiguar, por favor pregúntame si no entiendes algo.

EDITAR: Esto es WinForms. No se puede mostrar mucho código ya que es solo Control.Location = x; y Controles.Add(c);

preguntado el 07 de marzo de 13 a las 22:03

Código, código y más código. Muestre el código, señale el lugar donde está fallando, alguien le dirá el error. -

111 x 295 = 32745 y el control 296 provoca un desbordamiento, supongo. Entonces tiene un valor negativo. trate de reducir las alturas si es posible. -

desafortunadamente, eso no es posible. La cantidad de elementos depende del usuario y la altura de 111 tiene una razón. ¿Puedo evitar ese desbordamiento de todos modos, porque todavía está dibujando cadenas y agregando algunos de los controles? -

solo para entender, puede reducir las alturas, por ejemplo, a 100 px y luego ejecutar nuevamente. Si las cosas extrañas comienzan más tarde, esto demuestra que tengo razón. solo para experimentar -

Tienes razón, parece agregar más elementos correctamente. Aún así, ¿cómo se agregan algunos de los controles y otros no? Aunque no sabría qué podría haberse desbordado excepto por el valor .Top de un solo ListviewItem. Como la ubicación de esos controles es relativa al ListviewItem y no al Listview completo,

0 Respuestas

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.