理解一个涉及paint()的小c#代码片段

时间:2011-05-28 11:02:46

标签: c# visual-studio graphics

我是c#的新手(使用visual c#2010),并且想要制作一个简单的游戏,它会有弹跳球型的东西,

我使用图形fillellipse制作一个球,现在我有了这个代码,

protected override void OnPaint( PaintEventArgs e)
{
    //System.Drawing.Graphics gobj;
    gobj = this.CreateGraphics();
    Pen pen = new Pen(System.Drawing.Color.LightSkyBlue, 6);
    SolidBrush brush = new SolidBrush(System.Drawing.Color.Magenta);
    Rectangle myRectangle = new Rectangle((PointToClient(Cursor.Position).X), PointToClient(Cursor.Position).Y, 250, 200);

    gobj.DrawRectangle(pen, myRectangle);
    gobj.FillEllipse(brush, myRectangle);
} 

当我运行此代码时,我继续获取许多圆圈和矩形,仅在屏幕的一部分下弹出,但是它不应该只绘制一个圆圈吗?

请帮我理解这个??

3 个答案:

答案 0 :(得分:2)

使用DrawRectangle方法绘制矩形,然后使用FillEllipse绘制圆形,您只需使用FillEllipse。就像Mikant提到的那样你不需要创建图形 - 使用e.Graphics。这是代码:

protected override void OnPaint(PaintEventArgs e)
{
    SolidBrush brush = new SolidBrush(System.Drawing.Color.Magenta);
    e.Graphics.FillEllipse(brush, (this.Height / 2) - 40, (this.Width / 2) - 40, 80, 80);
}

这会在表单中心绘制圆圈。

祝好运实验和学习!

答案 1 :(得分:2)

这应该是一个评论,但我还没有足够的特权!

在处理使用非托管资源(如Pen和Font)的类型时,我会养成使用 using statement的好习惯。它将确保正确使用IDisposable对象。

答案 2 :(得分:1)

请记住永远不要使用CreateGraphics方法(特别是在OnPaint中)。将所有gobj替换为e.Graphics并享受