2009-12-15 4 views
0

Microsoft.VisualBasic을 사용합니다. 파워 팩. LineShape 구성 요소. 이 구성 요소는 좋지만 올바른 선 대신 곡선을 그립니다. 나는 OnPaint를 수정하기 위해 stardet을 사용했다 :LineShape에서 상속받은 새로운 곡선 모양 그리기

protected override void OnPaint(PaintEventArgs pevent) 
    { 
     //base.OnPaint(pevent);    
     pevent.Graphics.DrawLines(Pens.Green, new Point[] { 
      new Point(X1, Y1), new Point(40, 10), new Point(X2, Y2)}); 
    } 

구성 요소가 올바르게 그려지지만 마우스 이벤트 (클릭, 아래로)를 감지하지 못한다. 당신은뿐만 아니라 그러나 hitTest() 메소드를 오버라이드 (override) 할 필요가

using System; 
using System.Drawing; 
using System.Windows.Forms; 
using Microsoft.VisualBasic.PowerPacks; 

namespace WindowsApplication1 
{ 
    public partial class Form1 : Form 
    { 
     private ShapeContainer shapeContainer1; 

     public Form1() 
     { 
      this.shapeContainer1 = new PowerPacks.ShapeContainer(); 
      InitializeComponent(); 

      // add the shapeContainer1 
      this.Controls.Add(this.shapeContainer1); 

      // add a blue LineShape 
      this.shapeContainer1.Shapes.Add(
       new LineShape(60, 10, 90, 70)); 
      (this.shapeContainer1.Shapes.get_Item(0) as LineShape).BorderColor = Color.Blue; 

      // add a red (green in OnPaint) MyCourveShape 
      this.shapeContainer1.Shapes.Add(
       new MyCourveShape(10, 10, 50, 50)); 
      (this.shapeContainer1.Shapes.get_Item(1) as MyCourveShape).BorderColor = Color.Red; 
     } 
    } 

    public class MyCourveShape : Microsoft.VisualBasic.PowerPacks.LineShape 
    { 
     public MyCourveShape(int x1, int y1, int x2, int y2) 
     { 
      this.X1 = x1; 
      this.X2 = x2; 
      this.Y1 = y1; 
      this.Y2 = y2; 
     } 

     protected override void OnPaint(PaintEventArgs pevent) 
     { 
      //base.OnPaint(pevent);    
      pevent.Graphics.DrawLines(Pens.Green, new Point[] { 
       new Point(X1, Y1), new Point(40, 10), new Point(X2, Y2)}); 
     } 

     protected override void OnClick(EventArgs e) 
     { 
      base.OnClick(e); 
      MessageBox.Show("MyCourveShape clicked!"); 
     } 
    } 
} 

답변

1

: 도와주세요, 이건 내 전체 테스트 코드입니다. 기본 구현은 여전히 ​​그것이 직선이라고 가정합니다.

+0

조금 복잡해야한다고 생각합니다. 기본 구현을 살펴 봤습니다. – serhio

+1

비교적 굵은 펜으로 GraphicsPath.IsOutlineVisible을 사용하십시오. 같은 GraphicsPath 객체가 페인팅에 적합합니다. –