C#绘图问题

时间:2011-02-18 19:38:59

标签: c# graphics drawing image

我有一个关于使用C#绘图的一般性问题。在课程Test中,我有一个方法Draw:

public void Draw(Graphics g)
    {
        g.DrawLine(Pens.Black, x1, y1, x2, y2);
    }

现在我想在名为PictureBox1

的Picturebox中的主窗体中绘制它

但我怎么能画出来呢?

通常你可以在这样的图片框中画画:

private void Draw()
{
   Graphics g = PictureBox1.CreateGraphics();
   g.DrawLine(Pens.Black, x1, y1, x2, y2);
}

我知道这是一个愚蠢的问题,但我是初学者,想要获得基础知识;)

祝福:)

修改

对不起,我根本不了解你的帖子,你能再次向我解释

编辑2:

感谢您的回答。但我不知道这是如何运作的。

我的班级测试,在这个课程中有Draw方法:

private void Draw()
{
   Graphics g = PictureBox1.CreateGraphics();
   g.DrawLine(Pens.Black, x1, y1, x2, y2);
}

现在我想在我的MainBox中的PictureBox中绘制这个方法 FormMain

如何在我的另一个类别的picturbox中绘制test.Draw()?

我希望现在很清楚,抱歉我的经验不足 祝福

4 个答案:

答案 0 :(得分:2)

每次paint事件被触发时,picturebox控件都会覆盖它上面的任何内容(这几乎是所有时间)。所以你需要连接到那个事件:

this.pictureBox1.Paint += new PaintEventHandler(pictureBox1_Paint);

然后在事件中做你的绘图:

void pictureBox1_Paint(object sender, PaintEventArgs e)
{
     // Assuming your constructor takes coordinates as parameters
     var t = new Test(0, 0, 100, 100);
     t.Draw(e.Graphics);
}

答案 1 :(得分:0)

您必须从Graphics对象创建Control对象。

例如:

override void myControl OnPaint (PaintEventArgs e)
{
    Graphics g = e.Graphics

    //do something with g
}

我可以提供更好的信息,并提供一些关于您希望自定义类Test完成的指导。

答案 2 :(得分:0)

有几种方法可以做到这一点:

  1. 您可以在Test类中创建一个事件,并在表单中订阅该事件。然后,您可以毫无问题地调用PictureBox1.CreateGraphics()。
  2. 您可以将表单的当前实例传递给Test类中的方法,并通过传入方法的实例引用PictureBox。

答案 3 :(得分:0)

PictureBox控件用于在内部保存图像。你需要做的是在这张图片上画画,然后你就不必搞乱油漆事件了。像那样:

var img = new Bitmap();
using (Graphics g = Graphics.FromImage(img)) {
    g.DrawLine(Pens.Black, x1, y1, x2, y2);
}
pictureBox1.Image = img;