【发布时间】:2011-07-27 07:53:13
【问题描述】:
我正在制定一个日程表,并用小组来表示时间段,而约会则是更多的小组。
用户可以上下滚动,以便他们可以看到的范围提前或推迟。当约会超出可见范围的末端时,我希望有一个之字形表示约会超出了可见范围。
我已经确定了发生这种情况的情况,我调用了一个私有函数drawZigZag(Panel p, int direction); 来绘制它。一天是水平分布的,方向-1表示左边是锯齿形,1表示右边是锯齿形。
到目前为止,我还没有达到 zigzag 的水平,我只是在试验 CreateGraphics() 和 FillPolygon()。到目前为止,我有:
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);
}
我最初没有的第一个FillRectangle()。我只在FillPolygon() 不起作用时才添加。
基本上,它不起作用,我不知道为什么。面板是原始颜色 - 尚未填充深绿色。我以前用过CreateGraphics() 做其他事情,但我不确定为什么它在这种情况下不起作用。有什么想法吗?
编辑:对不起,我想我应该提一下:我的Panel 上有几个Label 控件描述了约会。如果可能,不应涵盖这些内容。
【问题讨论】:
-
抱歉,如果我在这里完全不合时宜,但看起来您并没有与控件的失效/绘制生命周期相关联。例如订阅/覆盖相关控件的 OnPaint 事件等。
-
请记住,您的控件将在需要更新时重新绘制。因此,如果您尝试在某个时候仅在控件上进行绘制,它将被重新绘制回正常外观,因此您将看不到您的更改。如果您想查看更改,则需要使用 Paint 事件注册您的绘制方法。
标签: c# winforms gdi system.drawing