namespace DraggableControls
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private Control activeControl;
private Point previousLocation;
void txt1_MouseDown(object sender, MouseEventArgs e)
{
activeControl = sender as Control;
previousLocation = e.Location;
Cursor = Cursors.Hand;
}
void txt1_MouseUp(object sender, MouseEventArgs e)
{
activeControl = null;
Cursor = Cursors.Default;
}
void txt1_MouseMove(object sender, MouseEventArgs e)
{
if (activeControl == null || activeControl != sender)
return;
Point location = activeControl.Location;
location.Offset(e.Location.X - previousLocation.X,
e.Location.Y - previousLocation.Y);
activeControl.Location = location;
DrawLine(txt1.Location, txt2.Location, panel1);
}
private void Form1_Load(object sender, EventArgs e)
{
txt1.MouseDown += new MouseEventHandler(txt1_MouseDown);
txt1.MouseMove += new MouseEventHandler(txt1_MouseMove);
txt1.MouseUp += new MouseEventHandler(txt1_MouseUp);
txt3.MouseDown += new MouseEventHandler(txt3_MouseDown);
txt3.MouseMove += new MouseEventHandler(txt3_MouseMove);
txt3.MouseUp += new MouseEventHandler(txt3_MouseUp);
}
void txt3_MouseDown(object sender, MouseEventArgs e)
{
activeControl = sender as Control;
previousLocation = e.Location;
Cursor = Cursors.Hand;
}
void txt3_MouseUp(object sender, MouseEventArgs e)
{
activeControl = null;
Cursor = Cursors.Default;
}
void txt3_MouseMove(object sender, MouseEventArgs e)
{
if (activeControl == null || activeControl != sender)
return;
Point location = activeControl.Location;
location.Offset(e.Location.X - previousLocation.X,
e.Location.Y - previousLocation.Y);
activeControl.Location = location;
DrawLine(txt3.Location, txt4.Location, panel1);
}
public void DrawLine(Point start, Point end, Panel ctrl)
{
ctrl.Refresh();
Pen P = new Pen(Color.Red, 3);
P.StartCap = System.Drawing.Drawing2D.LineCap.NoAnchor;
P.CustomEndCap =
new System.Drawing.Drawing2D.AdjustableArrowCap(4, 8, false);
ctrl.CreateGraphics().DrawLine(P, start, end);
ctrl.PerformLayout();
ctrl.CreateGraphics().Dispose();
}
}
}
드래그 가능한 드래그 가능한 텍스트 상자를 그리고 두 개의 텍스트 상자를 연결하고자합니다. 이 코드에서는 TextBox를 끌 수 있지만 두 줄 사이의 링크가 제대로 작동하지 않습니다.패널 컨트롤 안에 둘 이상의 드래그 가능한 선 그리기
또한 Paint 이벤트와 해당 e.Graphics 객체를 코딩하지 않아도됩니다. DrawLine 메소드의 결과는 비 지속 적입니다. (플러스 : 폐기 코드가 누락 및/또는 잘못 ..) – TaW