描画された線をマウスでつかんで移動しようとしています。マウスで描画された線を移動する
ラインはすでにGraphics.DrawLine(Pen P, Point A, Point B)
で描かれています。
ラインを作成し、フォーム上に描画して全く問題があります。
私が試してみた:
は
GraphicsPath
に行を追加する - これは、偶数ラインOnPaint
を描画しません。MouseEventArgs e.Location
は、いくつかの基本的な代数とのライン上にある場合ははチェック(私は今のように捨ててきた計算)
だからそれを要約すると:私はラインをつかむと、どこかでそれをドラッグしたいですe.Locationがライン上にあるかどうかを確認することすらできません。どうすればいいですか?
EDIT:これは、GraphicsPathを使用しているときのコードの表示方法です。私はGraphicsPathを使用しない場合は
は私が持っている:drawingShapes方法で
if (s.thisShape == ShapeType.Line) {
g.DrawLine(pen, s.p1, s.p2);
} else { ... }`
。ユーザーコントロールクラス:drawStuffから
private void drawStuff_MouseDown(object sender, MouseEventArgs e)
{
pointRegion = e.Location;
for (int i = 0; i < Shapes.Count; i++)
{
if (Shapes[i].Region.IsVisible(pointRegion))
{
isDragging = true;
count = i;
break;
}
}
}
private void drawStuff_MouseMove(object sender, MouseEventArgs e)
{
if (isDragging)
{
Shapes[count].moveWithDiff(pointRegion, e.Location);
pointRegion = e.Location;
Refresh();
}
}
private void drawStuff_MouseUp(object sender, MouseEventArgs e)
{
isDragging = false;
Refresh();
}
protected override void OnPaint(PaintEventArgs e)
{
base.OnPaint(e);
drawShapes(e.Graphics);
}
private void drawShapes(Graphics g)
{
temporaryPen = pennaLeft;
foreach (Shape s in Shapes)
{
g.FillRegion(temporaryPen, s.Region);
}
}
形状から:ユーザーコントロールクラス:drawingShapesでのif文
public void moveWithDiff(Point pr, Point mp)
{
Point p = new Point();
if (this.thisShape == ShapeType.Line)
{
p.X = mp.X - pr.X;
p.Y = mp.Y - pr.Y;
this.p1.X += p.X;
this.p1.Y += p.Y;
this.p2.X += p.X;
this.p2.Y += p.Y;
}
RefreshPath();
}
private void RefreshPath()
{
gPath = new GraphicsPath();
switch (thisShape)
{
case ShapeType.Line:
gPath.AddLine(this.p1, this.p2);
break;
}
this.Region = new Region(gPath);
}
今これは偶数ラインを描画しません、しかし、とは(言いました)それは完全に引き寄せますが、私はそれをどこかにドラッグできません。
@HansPassant私は、私が望むもので十分であるという質問を編集しました。これはRectangleやEllipseなどの他の図形と完全に機能しますが、線を移動するだけでなく、描画することもできます。 – NJS