private void Prt_CardForm_Paint(object sender, PaintEventArgs e)
{
//使用窗体直接绘制效果不错,但因为要画坐标线时必须的刷新导致这个老闪,有点不爽啊
Graphics g = e.Graphics;
Font font = new Font("Arial", 7);
//Draw X
int width = this.Width;
for (int i = 0; i <= width; i++)
{
SizeF size = g.MeasureString(Convert.ToString(i / 10), font);
int x = (int)(i / 25.4 * g.DpiX);
Point start = new Point(x, 30);
Point end = new Point(x, 30 - 5);
if (i % 5 == 0)
{
end = new Point(x, 30 - 10);
}
if (i % 10 == 0 && i > 0)
{
end = new Point(x, 30 - 15);
g.DrawString(Convert.ToString(i / 10), font, Brushes.Gray, new PointF(x - size.Width / 2, 15 - size.Height));
}
g.DrawLine(Pens.Gray, start, end);
}
//Draw Y
int height = this.Height;
for (int i = 0; i <= height; i++)
{
SizeF size = g.MeasureString(Convert.ToString(i / 10), font);
int y = (int)(i / 25.4 * g.DpiY);
Point start = new Point(30, y);
Point end = new Point(30 - 5, y);
if (i % 5 == 0)
{
end = new Point(30 - 10, y);
}
if (i % 10 == 0 && i > 0)
{
end = new Point(30 - 15, y);
g.DrawString(Convert.ToString(i / 10), font, Brushes.Gray, new PointF(15 - size.Width, y - size.Height / 2));
}
g.DrawLine(Pens.Gray, start, end);
}
}
为了应对两个标尺闪烁太厉害的问题,只好使用两个PictureBox来画标尺,奇怪了,在PictureBox上面画标尺就比较稳定了!
实际效果如图: