繁体   English   中英

C#绘图问题

[英]C# drawing issue

我有一个关于使用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:

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

有我的类Test ,在这个类中有Draw方法:

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

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

我怎么能在我的picturbox中绘制test.Draw()?

我希望现在对我缺乏经验的最良好祝愿表示清楚和抱歉

每次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);
}

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

例如:

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

    //do something with g
}

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

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM