C#如何在Windows窗体上的两个对象之间绘制一条线?

问题描述:

我一直试图在两个对象之间画一条线很长一段时间,但它仍然无法工作。C#如何在Windows窗体上的两个对象之间绘制一条线?

我的程序应该创建两个图片框(已经制作,称为PB1和PB2),并将它们与表单上的一行连接起来。

我有这样的:

public void DrawStuff(object sender, PaintEventArgs e) 
    { 
     Pen blackPen = new Pen(Color.Black, 3); 
     Point point1 = new Point(PB[0].Location.X, PB[0].Location.Y); 
     Point point2 = new Point(PB[1].Location.X, PB[1].Location.Y); 

     e.Graphics.DrawLine(blackPen, point1, point2); 
     CreateGraphics(); 
    } 

但我不能调用函数!此外,Boxes正在创建一个按钮,所以它不能从一开始就绘制,它必须在按下该按钮之后进行。如果任何人有工作代码,请告诉我,我即将分手。

+0

这是绘制事件连线了吗?我猜不是,否则你会看到这些PictureBoxes上的空例外,如果他们还没有创建。改用OnPaint覆盖。在访问PB [0]和PB [1]之前,确保它们存在。你没有给我们如何创建这些盒子的代码。消除CreateGraphics();线 - 它没有为你做任何事情。 – LarsTech

  1. 请勿(永远不要读取)明确呼叫CreateGraphics()。这是一种危害人类的罪行,除非是非常罕见的情况。
  2. 处理Paint事件(或覆盖OnPaint())您的Form。在那里写你的画线代码。

事情是这样的:

protected override void OnPaint(PaintEventArgs e) 
{ 
    base.OnPaint(e); 

    using(var blackPen = new Pen(Color.Black, 3)) 
    e.Graphics.DrawLine(blackPen, PB[0].Location, PB[1].Location); 
} 
  1. 每当你需要手动刷新屏幕,通话this.Invalidate()
开始=>
+0

还有一些工作不正常。它表示在覆盖受保护的成员时它不能更改访问修饰符。是的,我尝试将其设置为公开。 – ExoSkull

+0

@ExoSkull:将其设置为保护,因为它是问。我的错误也是。更新我的代码。 – dotNET

+0

好的,我得到了更多,但这次现在它崩溃,甚至没有画其他物体。一个按钮必须首先创建PictureBox,因此它会尝试在尚未存在的框之间绘制... – ExoSkull