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!");
}
}
}
조금 복잡해야한다고 생각합니다. 기본 구현을 살펴 봤습니다. – serhio
비교적 굵은 펜으로 GraphicsPath.IsOutlineVisible을 사용하십시오. 같은 GraphicsPath 객체가 페인팅에 적합합니다. –