在PictureBox上绘制网格

时间:2012-10-03 14:14:18

标签: c#

我目前正在使用pictureBox。我很难在图片框上画一个大约2 x 2正方形的网格。现在,下面的代码只给我一条画线。我怎样才能在pictureBox顶部绘制一个完整的网格?

CODE:

private Graphics g1;

    public Form1()
    {
        InitializeComponent();


        pictureBox1.Image = new Bitmap(500, 500);
        g1 = Graphics.FromImage(this.pictureBox1.Image);
        Pen gridPen = new Pen(Color.Black, 2);
        g1.DrawLine(gridPen, 0, 0, 100, 100);

    }

这就是我想要完成的事情: enter image description here

2 个答案:

答案 0 :(得分:8)

我发现了这个问题: Efficiently draw a grid in Windows Forms

以下是它的要点:

private void pictureBox1_Paint(object sender, PaintEventArgs e)
        {
            Graphics g = e.Graphics;
            int numOfCells = 200;
            int cellSize = 5;
            Pen p = new Pen(Color.Black);

            for (int y = 0; y < numOfCells; ++y)
            {
                g.DrawLine(p, 0, y * cellSize, numOfCells * cellSize, y * cellSize);
            }

            for (int x = 0; x < numOfCells; ++x)
            {
                g.DrawLine(p, x * cellSize, 0, x * cellSize, numOfCells * cellSize);
            }
        }

相应地自定义

答案 1 :(得分:1)

当然,MikeB接受的答案是正确的,但是OP仍然很困惑,人们仍然看到这一点,所以我添加一个明确的答案(是的,8年后)。

迈克的方法

private void pictureBox1_Paint(object sender, PaintEventArgs e)

是一个需要在正确的时间调用的独立方法。要实现这一点,您需要使用OnPaint事件调度程序注册它,因此每当发生OnPaint事件时都会调用它。为此,您可以将以下行放入一些方便的位置,例如在类的构造函数中:

OnPaint += pictureBox1_Paint;

这种方法没问题,但是如果你到达真正需要绘图性能的地方,它会对你造成伤害,因为构建并传递给PaintEventArgs需要额外的费用。更好的方法是覆盖父类的OnPaint方法,并将绘图代码直接放在OnPaint方法中。这样您就不必连接任何事件处理程序,并且运行速度更快。代码看起来几乎相同:

protected override void OnPaint (PaintEventArgs e)
        {
            Graphics g = e.Graphics;
            int numOfCells = 200;
            int cellSize = 5;
            Pen p = new Pen(Color.Black);

            for (int y = 0; y < numOfCells; ++y)
            {
                g.DrawLine(p, 0, y * cellSize, numOfCells * cellSize, y * cellSize);
            }

            for (int x = 0; x < numOfCells; ++x)
            {
                g.DrawLine(p, x * cellSize, 0, x * cellSize, numOfCells * cellSize);
            }
        }

最后一个建议:在PictureBox控件中绘图几乎不是一个好主意。很多人都这样做,但没有多少专家会这样做。它们并非设计为绘图画布 - 它们只是继承了所有基于表单的控件所具有的相同功能 - 并且它们增加了复杂性并减慢了速度,而根本没有添加任何有用的功能。如果你摆脱了图片盒,只是直接在拿着你的图片框的表格或面板上画画,你会更高兴。

相关问题