在Form中画标尺

来源:互联网 发布:英语来源 知乎 编辑:程序博客网 时间:2024/05/21 06:27
        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上面画标尺就比较稳定了!

    实际效果如图:


0 0
原创粉丝点击