我怎么能只使用一次可变图形?

时间:2013-12-26 03:19:33

标签: c# winforms

我有这个form1 paint事件:

private void Form1_Paint(object sender, PaintEventArgs e)
        {
            DrawText("List points", Color.Red, Color.Green, e.Graphics, new Point(369, 90), new Point(469, 90), new Point(480, 83),8.25);
            DrawText("List clouds1", Color.Black, Color.Green, e.Graphics, new Point(369, 110), new Point(469, 110), new Point(480, 103),8.25);
        }

DrawText方法:

private void DrawText(string text, Color pen_color, Color brushes_color, Graphics graphics, Point point1, Point point2, Point point3,
                              double font_size)
        {
            this.Font = new Font(this.Font.FontFamily.Name, (float)font_size);
            SolidBrush brush = new SolidBrush(brushes_color);
            using (Pen pen = new Pen(pen_color, 10f))
            {
                Point pt1 = point1;
                Point pt2 = point2;
                graphics.DrawLine(pen, point1, point2);
            }

            graphics.DrawString(text,
                    this.Font, brush, point3);
        }

当我使用e.Graphics两次从paint事件中调用此方法两次时。 我想知道我是否可以在DrawText方法中创建一个局部Graphics变量并使用它?

我尝试在DrawText方法中添加:

Graphics graphics = this.CreateGraphics();

然后我删除了图形变量,我不需要使用e.Graphics调用它。 但现在,当我看到它绘制的文本时,文本看起来就像每次两次绘图一样。 文字不是很薄/正常,就像我每次调用方法时两次使用e.Graphics一样。

还有其他办法吗?

2 个答案:

答案 0 :(得分:1)

你的方法是完全正确的,如果你想减少绘图处理程序中的代码,你可以创建一个新的绘图文本类,如下所示:

class MyTextDrawer 
{
    private readonly Graphics g;

    public MyTextDrawer(Graphics g) 
    {
        this.g = g;
    }

    public void DrawText(string text, Color pen_color, Color brushes_color, Point point1, Point point2, Point point3,
                          double font_size)
    {
        this.Font = new Font(this.Font.FontFamily.Name, (float)font_size);
        SolidBrush brush = new SolidBrush(brushes_color);
        using (Pen pen = new Pen(pen_color, 10f))
        {
            Point pt1 = point1;
            Point pt2 = point2;
            g.DrawLine(pen, point1, point2);
        }

        g.DrawString(text,
                this.Font, brush, point3);
    }

}

用法

private void Form1_Paint(object sender, PaintEventArgs e)
{
    var drawer = new MyTextDrawer(e.Graphics);

    drawer.DrawText("List points", Color.Red, Color.Green, new Point(369, 90), new Point(469, 90), new Point(480, 83),8.25);
    drawer.DrawText("List clouds1", Color.Black, Color.Green, new Point(369, 110), new Point(469, 110), new Point(480, 103),8.25);
}

您还可以在课堂上填写笔,字体大小和其他内容。

答案 1 :(得分:0)

我认为两次调用e.graphics没有任何问题。 e.Graphics是一个局部变量,调用它两次没有任何开销,你只是将它传递给正在使用它的DrawText方法。

但如果你想做就可以

Graphics g = e.Graphics