using System;
using System.Drawing;
using System.Linq;
using System.Windows.Forms;
namespace Library.Controls
{
public partial class DragDropContainer : UserControl
{
public DragDropContainer()
{
InitializeComponent();
}
public int ColumnCount { get; set; }
private void DragDropContiner_Load(object sender, EventArgs e)
{
for (var i = 0; i < ColumnCount; i++)
{
var panel = new DragDropPanel
{
Name = "" + i,
Width = Width / ColumnCount,
BorderStyle = BorderStyle.FixedSingle,
Dock = DockStyle.Left
};
Controls.Add(panel);
}
SizeChanged += (o, args) =>
{
Controls.OfType().ToList().ForEach(x =>
{
x.Width = Width / ColumnCount;
});
};
}
private bool _mouseDown;
private Point _point = new Point(0, 0);
private Control _temp;
public void Add(Control control)
{
var panels = Controls.OfType();
var minControlsCount = panels.Min(x => x.Controls.Count);
var dragDropPanel = panels.FirstOrDefault(x => x.Controls.Count == minControlsCount);
var panel = new Panel
{
Size = new Size(dragDropPanel.Width, control.Height + 10),
Dock = DockStyle.Top
};
var header = new Panel
{
Dock = DockStyle.Top,
BackColor = Color.Aqua,
Height = 10
};
dragDropPanel.Controls.Add(panel);
panel.Controls.Add(header);
panel.Controls.Add(control);
control.Dock = DockStyle.Fill;
control.BringToFront();
panel.BringToFront();
header.MouseDown += (sender, args) =>
{
if (args.Y > 10) return;
panel.Cursor = Cursors.NoMove2D;
_mouseDown = true;
_point = args.Location;
_temp = panel;
panel.Dock = DockStyle.None;
};
header.MouseUp += (sender, args) =>
{
panel.Cursor = DefaultCursor;
panel.Dock = DockStyle.Top;
_mouseDown = false;
_temp = null;
panel.BringToFront();
};
header.MouseMove += (sender, args) =>
{
if (true.Equals(_mouseDown))
{
panel.Location = new Point(panel.Location.X + args.X - _point.X,
panel.Location.Y + args.Y - _point.Y);
if (panel.Location.X + args.X > panel.Parent.Width)
{
var location = new Point(panel.Location.X - dragDropPanel.Width, panel.Location.Y);
var panelIndex = int.Parse(dragDropPanel.Name);
if (Controls.Count > panelIndex - 1)
{
dragDropPanel = Controls[panelIndex - 1] as DragDropPanel;
if (dragDropPanel != null)
{
dragDropPanel.Controls.Add(panel);
panel.Location = location;
}
}
}
else if (panel.Location.X + args.X < 0)
{
var location = new Point(dragDropPanel.Width + panel.Location.X, panel.Location.Y);
var panelIndex = int.Parse(dragDropPanel.Name);
if (Controls.Count > panelIndex + 1)
{
dragDropPanel = Controls[panelIndex + 1] as DragDropPanel;
dragDropPanel.Controls.Add(panel);
panel.Location = location;
}
}
}
};
}
}
public class DragDropPanel : Panel
{
}
}
using System.Drawing;
using System.Linq;
using System.Windows.Forms;
namespace Library.Controls
{
public partial class DragDropContainer : UserControl
{
public DragDropContainer()
{
InitializeComponent();
}
public int ColumnCount { get; set; }
private void DragDropContiner_Load(object sender, EventArgs e)
{
for (var i = 0; i < ColumnCount; i++)
{
var panel = new DragDropPanel
{
Name = "" + i,
Width = Width / ColumnCount,
BorderStyle = BorderStyle.FixedSingle,
Dock = DockStyle.Left
};
Controls.Add(panel);
}
SizeChanged += (o, args) =>
{
Controls.OfType
{
x.Width = Width / ColumnCount;
});
};
}
private bool _mouseDown;
private Point _point = new Point(0, 0);
private Control _temp;
public void Add(Control control)
{
var panels = Controls.OfType
var minControlsCount = panels.Min(x => x.Controls.Count);
var dragDropPanel = panels.FirstOrDefault(x => x.Controls.Count == minControlsCount);
var panel = new Panel
{
Size = new Size(dragDropPanel.Width, control.Height + 10),
Dock = DockStyle.Top
};
var header = new Panel
{
Dock = DockStyle.Top,
BackColor = Color.Aqua,
Height = 10
};
dragDropPanel.Controls.Add(panel);
panel.Controls.Add(header);
panel.Controls.Add(control);
control.Dock = DockStyle.Fill;
control.BringToFront();
panel.BringToFront();
header.MouseDown += (sender, args) =>
{
if (args.Y > 10) return;
panel.Cursor = Cursors.NoMove2D;
_mouseDown = true;
_point = args.Location;
_temp = panel;
panel.Dock = DockStyle.None;
};
header.MouseUp += (sender, args) =>
{
panel.Cursor = DefaultCursor;
panel.Dock = DockStyle.Top;
_mouseDown = false;
_temp = null;
panel.BringToFront();
};
header.MouseMove += (sender, args) =>
{
if (true.Equals(_mouseDown))
{
panel.Location = new Point(panel.Location.X + args.X - _point.X,
panel.Location.Y + args.Y - _point.Y);
if (panel.Location.X + args.X > panel.Parent.Width)
{
var location = new Point(panel.Location.X - dragDropPanel.Width, panel.Location.Y);
var panelIndex = int.Parse(dragDropPanel.Name);
if (Controls.Count > panelIndex - 1)
{
dragDropPanel = Controls[panelIndex - 1] as DragDropPanel;
if (dragDropPanel != null)
{
dragDropPanel.Controls.Add(panel);
panel.Location = location;
}
}
}
else if (panel.Location.X + args.X < 0)
{
var location = new Point(dragDropPanel.Width + panel.Location.X, panel.Location.Y);
var panelIndex = int.Parse(dragDropPanel.Name);
if (Controls.Count > panelIndex + 1)
{
dragDropPanel = Controls[panelIndex + 1] as DragDropPanel;
dragDropPanel.Controls.Add(panel);
panel.Location = location;
}
}
}
};
}
}
public class DragDropPanel : Panel
{
}
}
No comments:
Post a Comment