Ozz*_*zah 6 c# system.drawing gdi winforms
我正在制定一个日程安排并用面板代表时间段,而约会则是更多的面板.
用户可以向上和向下滚动,以便他们可以看到的范围更早或更晚.当约会在可见范围的末尾运行时,我希望有一个锯齿形,表明约会超出了可见范围.
我已经确定了发生这种情况的情况,并且我调用了一个私有函数drawZigZag(Panel p, int direction);
来绘制它.日期水平展开,方向-1表示左侧的锯齿形,1表示右侧的锯齿形.
到目前为止,我还没有达到曲折,我只是在试验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);
}
Run Code Online (Sandbox Code Playgroud)
FillRectangle()
我最初没有的第一个.我只补充说,当时FillPolygon()
没有用.
基本上,它不起作用,我不知道为什么.面板是原始颜色 - 它尚未填充DarkGreen.我以前用过CreateGraphics()
其他东西,我不确定为什么它在这种情况下不起作用.有任何想法吗?
编辑:对不起,我想我应该提一下:我的几个Label
控件Panel
描述了约会.如果可能,不应涵盖这些内容.
Dan*_*man 20
您需要从paint事件处理程序中调用此方法,而不仅仅是您喜欢的方法.所以在你的构造函数中你可能有:
panel1.Paint += new PaintEventHandler(panel1_Paint);
Run Code Online (Sandbox Code Playgroud)
然后执行:
private void panel1_Paint( object sender, PaintEventArgs e )
{
var p = sender as Panel;
var g = e.Graphics;
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 );
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
51176 次 |
最近记录: |