PictureBox.CreateGraphics()跟e.Graphics

PictureBox.CreateGraphics()和e.Graphics
就是这个怎么画一个网格线然后给了现在的picturebox。条件是网格线是可以控制加还是不加的。
------解决思路----------------------
1、告诉pictureBox在显示图片后,还要进行‘后期’绘画,这里可以用pictureBox的Paint事件。
2、使用一个标志,来指示是否在‘后期’绘画中加网格线。
3、如果标志改变,要求pictureBox进行刷新,以显示最新变动。
4、画网格线可以用Graphics.DrawLine。


public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
        this.pictureBox1.Paint += pictureBox1_Paint;   // 1
    }

    void pictureBox1_Paint(object sender, PaintEventArgs e)
    {
        if (!this.gridVisible) return;

        Rectangle rect = this.pictureBox1.ClientRectangle;
        float gridWidth = (rect.Width - 1f) / (gridLines - 1);
        float gridHeith = (rect.Height - 1f) / (gridLines - 1);
        for(int i = 0; i < gridLines; i++)  // 4
        {
            e.Graphics.DrawLine(Pens.Red, rect.Left, gridHeith * i, rect.Right, gridHeith * i);
            e.Graphics.DrawLine(Pens.Red, gridWidth * i, rect.Top, gridWidth * i, rect.Bottom);
        }
    }

    bool gridVisible = true;
    const int gridLines = 4;
    private void button1_Click(object sender, EventArgs e)
    {
        gridVisible = !gridVisible;   // 1
        this.pictureBox1.Invalidate();  // 2
    }
}

------解决思路----------------------
对ls代码提一点改进
bool gridVisible = true;
这个可以定义一个属性:
public bool ShowGridLine
{
    get { return gridVisible; }
    set { gridVisible = value; }
}
------解决思路----------------------
引用:
对ls代码提一点改进
bool gridVisible = true;
这个可以定义一个属性:
public bool ShowGridLine
{
    get { return gridVisible; }
    set { gridVisible = value; }
}

然后在set方法里判断value是否变化,没变化不重新赋值,变化了就刷新picture