使用PaintEventArgs绘制椭圆

时间:2015-03-15 00:22:38

标签: c# drawing

我有一个简单的Photoshop制作的网格,我想用它作为进度条,我需要绘制从1到100的圆形椭圆(然后在x时间内可能大约100次)。

如果我使用System.Graphic,我没有持久的结果。

然后我通过在表单的Paint Event中插入指令找到了使用PaintEventArgs方法的代码。

不幸的是,在我看来,这不是一个解决方案,因为我只需要在我需要的时候画画,而且只在我想要的地方画画....换句话说,我需要一个简单的函数,当我需要时能够画出所需的椭圆...... / p>

我还试图覆盖OnPaint-base但我真的不明白如何使用它,如果可能有助于实现我的目标。

这里有一些代码:

使用绘画事件:

    private void Main_Paint(object sender, PaintEventArgs e)
    {
        // Create pen.
        Pen blackPen = new Pen(Color.Yellow, 3);

        // Create rectangle for ellipse.
        Rectangle rect = new Rectangle(355, 282, 9, 9);
        e.Graphics.DrawEllipse(blackPen, rect);
    } 

使用图形模式:

private void lbl_help_Click(object sender, EventArgs e)
{   
    //SetStatus("BURNING PROCESS COMPLETED SUCCESSFULLY");
    Graphics g = this.CreateGraphics();
    // Create pen.
    Pen blackPen = new Pen(Color.Yellow, 3);

    // Create rectangle for ellipse.
    Rectangle rect = new Rectangle(355, 282, 9, 9);

    // Draw ellipse to screen.
    g.DrawEllipse(blackPen, rect);

    System.Threading.Thread.Sleep(3000);            
}

我发现这个覆盖OnPaint(),但我真的不知道如何使用它,如何覆盖form-paint事件或如何仅在需要时调用它并传递值:

private void lbl_help_Click(object sender, EventArgs e)
{   
    //SetStatus("BURNING PROCESS COMPLETED SUCCESSFULLY",);
    Graphics g = this.CreateGraphics();
    // Create pen.
    Pen blackPen = new Pen(Color.Yellow, 3);

    // Create rectangle for ellipse.
    Rectangle rect = new Rectangle(355, 282, 9, 9);

    // Draw ellipse to screen.
    g.DrawEllipse(blackPen, rect);

    System.Threading.Thread.Sleep(3000);            
}

其他的东西:

我想如果我使用变量来存储百分比并调用表单的绘制刷新(可能无效?)来更新结果应该可以工作但是我会丢失任何类型的动画,在其他地方我回到非再次持续状态...我需要使用网格作为进度条,只在期望的时间添加圆圈,而不会丢失背面图...

我需要填写的网格非常简单,这里有截图:

我不应该为声誉发布图片(我是新用户!),here the link

编辑: 我解决了平滑问题(至少在图形模式下):

g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;

0 个答案:

没有答案