为什么 ControlPaint.DrawGrid 函数不向 PictureBox 显示任何内容

Why Isn't ControlPaint.DrawGrid Function not Displaying Anything to a PictureBox

我想做方格纸格子,把绘图设置成图片框的图片。现在我什至可能在绘制方格纸网格时使用了错误的东西,但我四处询问,有些人说 DrawGrid 方法可行。 None 下面的代码返回任何错误,但是当我 运行 button1_Click 方法时,它不会向 picturebox.

显示任何内容
private void button1_Click(object sender, EventArgs e)
{
    button2.Visible = true;

    Bitmap bmp = new Bitmap(pictureBox1.ClientSize.Width, pictureBox1.ClientSize.Height);
    Size yourGridspacing = new Size((int)numericUpDown1.Value, (int)numericUpDown2.Value);
    using (Graphics G = Graphics.FromImage(bmp))
    {
         ControlPaint.DrawGrid(G, new Rectangle(Point.Empty, bmp.Size), yourGridspacing , Color.Black);
    }

    pictureBox1.Image = bmp;
}

知道问题出在哪里吗?

您的 PictureBox 可能有一个 White 背景..如果是这样,请告诉 ControlPaint.DrawGrid 方法所以..:[=​​21=]

     ControlPaint.DrawGrid(G, new Rectangle(Point.Empty, bmp.Size), 
                           yourGridspacing , Color.White);

参数控制点的颜色;它应该有助于找到 对比 的颜色。所以也许最好的写法是:

     ControlPaint.DrawGrid(G, new Rectangle(Point.Empty, bmp.Size), 
                           yourGridspacing, pictureBox1.BackColor);

这将适用于除 Color.Transparent 以外的所有颜色。(在这种情况下,下方控件的颜色将决定这些点是否可见..)

你可能会疑惑,为什么要选择这样迂回的方式呢?好吧,方法 DrawGrid 并不是像 Graphics 中那样的普通绘图方法。它是旨在构建 Windows 控件(如 ButtonCheckBox)的稳健显示的几种方法之一。现在,绘制网格的背景需要 没有只有一种颜色;它可以是图像或渐变,它可以改变..

您应该选择一种典型的颜色来代表该背景。然后系统将为点选择具有良好对比度的颜色。

有关控制网格颜色的方法,请参阅 my other answer 中的最后一个选项!