私の.net c#プログラムでは、テキストボックス(私はDrawLine関数を使用しています)の値を使用して数行を描画します。私は、この行の一つをclikで動かし、この行をマウスで動かすことができるようにしたいと思います - それは可能でしょうか?ことが可能です。もちろん、グラフィック - DrawLine - 線を引いて移動する
9
A
答えて
37
public class LineMover : Form
{
public LineMover()
{
this.DoubleBuffered = true;
this.Paint += new PaintEventHandler(LineMover_Paint);
this.MouseMove += new MouseEventHandler(LineMover_MouseMove);
this.MouseDown += new MouseEventHandler(LineMover_MouseDown);
this.MouseUp += new MouseEventHandler(LineMover_MouseUp);
this.Lines = new List<GraphLine>()
{
new GraphLine (10, 10, 100, 200),
new GraphLine (10, 150, 120, 40),
};
}
void LineMover_MouseUp(object sender, MouseEventArgs e)
{
if (Moving != null)
{
this.Capture = false;
Moving = null;
}
RefreshLineSelection(e.Location);
}
void LineMover_MouseDown(object sender, MouseEventArgs e)
{
RefreshLineSelection(e.Location);
if (this.SelectedLine != null && Moving == null)
{
this.Capture = true;
Moving = new MoveInfo
{
Line = this.SelectedLine,
StartLinePoint = SelectedLine.StartPoint,
EndLinePoint = SelectedLine.EndPoint,
StartMoveMousePoint = e.Location
};
}
RefreshLineSelection(e.Location);
}
void LineMover_Paint(object sender, PaintEventArgs e)
{
e.Graphics.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.High;
e.Graphics.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;
foreach (var line in Lines)
{
var color = line == SelectedLine ? Color.Red : Color.Black;
var pen = new Pen(color, 2);
e.Graphics.DrawLine(pen, line.StartPoint, line.EndPoint);
}
}
void LineMover_MouseMove(object sender, MouseEventArgs e)
{
if (Moving != null)
{
Moving.Line.StartPoint = new PointF(Moving.StartLinePoint.X + e.X - Moving.StartMoveMousePoint.X, Moving.StartLinePoint.Y + e.Y - Moving.StartMoveMousePoint.Y);
Moving.Line.EndPoint = new PointF(Moving.EndLinePoint.X + e.X - Moving.StartMoveMousePoint.X, Moving.EndLinePoint.Y + e.Y - Moving.StartMoveMousePoint.Y);
}
RefreshLineSelection(e.Location);
}
private void RefreshLineSelection(Point point)
{
var selectedLine = FindLineByPoint(Lines, point);
if (selectedLine != this.SelectedLine)
{
this.SelectedLine = selectedLine;
this.Invalidate();
}
if (Moving != null)
this.Invalidate();
this.Cursor =
Moving != null ? Cursors.Hand :
SelectedLine != null ? Cursors.SizeAll :
Cursors.Default;
}
public List<GraphLine> Lines = new List<GraphLine>();
GraphLine SelectedLine = null;
MoveInfo Moving = null;
static GraphLine FindLineByPoint(List<GraphLine> lines, Point p)
{
var size = 10;
var buffer = new Bitmap(size * 2, size * 2);
foreach (var line in lines)
{
//draw each line on small region around current point p and check pixel in point p
using (var g = Graphics.FromImage(buffer))
{
g.Clear(Color.Black);
g.DrawLine(new Pen(Color.Green, 3), line.StartPoint.X - p.X + size, line.StartPoint.Y - p.Y + size, line.EndPoint.X - p.X + size, line.EndPoint.Y - p.Y + size);
}
if (buffer.GetPixel(size, size).ToArgb() != Color.Black.ToArgb())
return line;
}
return null;
}
public static void Main()
{
Application.Run(new LineMover());
}
}
public class MoveInfo
{
public GraphLine Line;
public PointF StartLinePoint;
public PointF EndLinePoint;
public Point StartMoveMousePoint;
}
public class GraphLine
{
public GraphLine(float x1, float y1, float x2, float y2)
{
this.StartPoint = new PointF(x1, y1);
this.EndPoint = new PointF(x2, y2);
}
public PointF StartPoint;
public PointF EndPoint;
}
関連する問題
- 1. 水平線を描いて移動する
- 2. SVG.js直線を移動して直線を移動する
- 3. SVG - アニメーション直線のパスに沿って円を移動する
- 4. Javaグラフィックで円弧パスに沿って移動する形
- 5. Android Canvas drawLine
- 6. DrawLineを使用して放物線を描くC#
- 7. JPanelでグラフィックの位置を移動する方法
- 8. 罫線を移動せずにすべてのテキストを移動する方法
- 9. Android - アニメーションのキャンバス.DrawLine
- 10. java-jframe-drawline
- 11. CE上のアンチエイリアスDrawLine
- 12. 動的なSVGグラフィックで一定の境界線
- 13. wp7の曲線移動アニメーション
- 14. DrawLine in Java Swing
- 15. 線を引いてエラーコードを取得する#1009
- 16. Android GPSプロッタは、現在の位置から線を引いて移動を停止します。
- 17. Android - Canvas drawLine in ImageView
- 18. 水平線に沿ってSKSpriteNodeを移動する方法
- 19. マウスの移動に基づいて線を描く方法
- 20. 線を引いた後に遅らせるには?
- 21. Raphael SVGは直線の水平線に沿ってオブジェクトを移動します
- 22. Javaでdrawlineを使用して階段線を描くにはどうすればよいですか?
- 23. 角のDrawLineオフセット
- 24. drawLineの座標
- 25. もう一度下線を引いて
- 26. 水平線を上下に移動
- 27. KML線の移動方向を表示
- 28. キャンバス上を移動する線をアニメ化する
- 29. .drawLine on event(ボタンクリック)Jpanel/Jbutton/JTabbedPane
- 30. javascript canvas:曲線付き移動平均線を描く
。確かにあなたはより良い質問を考えることができますか? –
これを行うにはどうすればいいですか? :)私はこのような何かを持っていますhttp://www.youtube.com/watch?v=EiByTu7aa0kと私はこの行の1つをクリックし、その位置をハンギングしたい – Juss
まあ、あなたはこれまで何をしていますか?少なくとも行のリストを作成して、ユーザーが行をクリックしたかどうかを確認するMouseDownイベントハンドラを作成しましたか?正確にあなたは立ち往生しましたか? –