C#在面板上绘图

我正在制定一个日程安排并用面板代表时间段,并且约会更多的是面板.

用户可以向上和向下滚动,以便他们可以看到的范围更早或更晚.当约会在可见范围的末尾运行时,我希望有一个曲折,表明约会超出了可见范围.

我已经确定了发生这种情况的情况,并且我调用了私有函数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);
    }

我原来没有的第一个FillRectangle().我只补充说当FillPolygon()不起作用时.

基本上,它不起作用,我不知道为什么.面板是原始颜色 – 它尚未填充DarkGreen.我之前使用过CreateGraphics()用于其他事情,我不确定为什么它在这个实例中不起作用.有任何想法吗?

编辑:对不起,我想我应该提一下:我的Panel上有几个Label控件来描述约会.如果可能,不应涵盖这些内容.

您需要从paint事件处理程序中调用此方法,而不仅仅是您喜欢的方法.所以在你的构造函数中你可能有:

panel1.Paint += new PaintEventHandler(panel1_Paint);

然后执行:

    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 );
    }
https://stackoverflow.com/questions/5507605/c-sharp-drawing-on-panels

本站文章除注明转载外,均为本站原创或编译
转载请明显位置注明出处:C#在面板上绘图