2009-12-15 75 views
0

我使用Microsoft.VisualBasic。 PowerPacks。 LineShape組件。 這個組件很好,但我想繪製一條曲線而不是一條正確的線。我stardet修改OnPaint:繪製從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)}); 
    } 

組件被正確繪製,但它不檢測鼠標事件(單擊,向下)。請幫忙,這是我的整個測試代碼:

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

你也必須重寫HitTest()方法。基本實現仍然假設它是一條直線。

+0

我想這應該是一個有點複雜...在基地實施... ...看看 – serhio 2009-12-15 13:45:46

+1

使用GraphicsPath.IsOutlineVisible與一個相對較胖的筆。同一個GraphicsPath對象適合繪畫。 – 2009-12-15 14:07:25