Estoy elaborando un horario de día y representando ranuras de tiempo con paneles, y las citas son aún más paneles en la parte superior.C# Dibujo en Paneles
El usuario puede desplazarse hacia arriba y hacia abajo para que el rango que puede ver se desplace antes o después. Cuando una cita se ejecuta fuera del rango visible, quiero que haya un zig-zag que indique que la cita se extiende más allá de los límites visibles.
He identificado el caso en el que esto ocurre, y llamo a una función privada drawZigZag(Panel p, int direction);
para dibujarlo. El día se extiende horizontalmente, y la dirección -1 indica un zigzag a la izquierda y 1 indica un zigzag a la derecha.
Hasta ahora, todavía no estoy a la altura del zigzag, solo estoy experimentando con CreateGraphics()
y FillPolygon()
. Hasta ahora tengo:
private void drawZigZag(Panel p, int direction) // 1 = right, -1 = left
{
Graphics g = p.CreateGraphics();
g.FillRectangle(new SolidBrush(Color.FromArgb(0, Color.Black)), p.DisplayRectangle);
Point[] points = new Point[4];
points[0] = new Point(0, 0);
points[1] = new Point(0, p.Height);
points[2] = new Point(p.Width, p.Height);
points[3] = new Point(p.Width, 0);
Brush brush = new SolidBrush(Color.DarkGreen);
g.FillPolygon(brush, points);
}
La primera FillRectangle()
yo no tenía originalmente. Solo agregué eso cuando el FillPolygon()
no funcionó.
Básicamente, no está funcionando y no estoy seguro de por qué. El panel es del color original, no se ha llenado DarkGreen. He utilizado CreateGraphics()
antes para otras cosas, y no estoy muy seguro de por qué no está funcionando en esta instancia. ¿Algunas ideas?
Editar: Lo siento, pensé que debería mencionar: Hay varios controles Label
en mi Panel
que describen la cita. Estos no deberían estar cubiertos si es posible.
Disculpas si estoy completamente fuera de lugar aquí, pero no parece que estés atando en el ciclo de vida de invalidación/pintura del control. p.ej. suscribirse/anular el evento OnPaint del control en cuestión, etc. – lzcd
Recuerde, sus controles se volverán a pintar cada vez que necesiten ser actualizados. Por lo tanto, si intenta pintar sobre su control en algún momento, se lo volverá a pintar con su aspecto normal para que no vea los cambios. Debe registrar su método de pintura con el evento Paint si desea ver los cambios. –