2017-11-11 18 views
0

저는 오랫동안 두 객체 사이에 선을 그려려고했지만 여전히 작동하지 않습니다.C# Windows Form에서 두 개체 사이에 선을 그리려면 어떻게해야합니까?

내 프로그램은 이미 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(); 
    } 

을하지만 함수를 호출 할 수 없습니다

나는이있다! 또한 상자는 단추로 만들어져 있으므로 처음부터 그릴 수는 없으므로 단추를 누른 후에 수행해야합니다. 누구나 작동하는 코드가 있다면 알려주십시오.

+0

그 드로우 이벤트가 유선입니까? 나는 아직 만들지 않았다면 그 PictureBox에 null 예외를 볼 것입니다. 대신 OnPaint 재정의를 사용하십시오. PB [0]과 PB [1]에 액세스하기 전에 이들이 존재하는지 확인하십시오. 당신은 우리가 그 상자를 어떻게 만드는지에 대한 코드를주지 않았습니다. 그 CreateGraphics()를 제거하십시오; 라인 - 그것은 당신을 위해 아무것도하지 않습니다. – LarsTech

답변

1
  1. CreateGraphics()을 명시 적으로 호출하지 마십시오. 이것은 매우 드문 상황을 제외하고는 인류에 대한 범죄입니다.
  2. FormPaint 이벤트 (또는 대체 OnPaint())를 처리하십시오. 거기에 선 그리기 코드를 작성하십시오. 이 같은

뭔가 :

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); 
} 
수동으로 화면을 새로 고쳐야 할 때마다
  • , this.Invalidate() 전화
      .
  • +0

    아직 작동하지 않는 것이 있습니다. 보호 된 멤버를 재정의 할 때 액세스 한정자를 변경할 수 없다고 말합니다. 그리고 네, 공개적으로 설정하려고했습니다. – ExoSkull

    +0

    @ExoSkull : 묻는대로 protected로 설정하십시오. 내 실수도. 내 코드를 업데이트했습니다. – dotNET

    +0

    좋아, 나 더있어,하지만 이번엔 지금은 충돌하고 다른 개체를 페인트하지 않습니다. 버튼은 먼저 PictureBox를 만들어야하기 때문에 아직 존재하지 않는 박스들 사이를 그리려고합니다 ... – ExoSkull