我有这个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一样。
还有其他办法吗?
答案 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