Как отключить привязку flowlayout во время выполнения
Я создаю небольшой проект, где я хочу перетащить метку из одной flowLayoutPanel в другую.
namespace test999 { public partial class Form1 : Form { public Form1() { InitializeComponent(); } int shrewsbutyTotal; int donningtonTotal; //int margin = 10; Point move; private void Form1_Load(object sender, EventArgs e) { labelBackgroundColour(); flowLayoutPanel1.BorderStyle = BorderStyle.FixedSingle; flowLayoutPanel2.BorderStyle = BorderStyle.FixedSingle; makeMoveable(); updateTotals(); shrewsbutyTotal = flowLayoutPanel1.Controls.Count; donningtonTotal = flowLayoutPanel2.Controls.Count; lbl_total_shrewsbury.Text = "Shrewsbury Vehicle Count: " + shrewsbutyTotal.ToString(); lbl_total_donnington.Text = "Donnington Vehicle Count: " + donningtonTotal.ToString(); } void updateTotals() { shrewsbutyTotal = flowLayoutPanel1.Controls.Count; donningtonTotal = flowLayoutPanel2.Controls.Count; lbl_total_shrewsbury.Text = "Shrewsbury Vehicle Count: " + shrewsbutyTotal.ToString(); lbl_total_donnington.Text = "Donnington Vehicle Count: " + donningtonTotal.ToString(); } void labelMouseDown(object sender, MouseEventArgs e) { flowLayoutPanel1.Cursor = Cursors.Hand; move = e.Location; } void labelMouseMove(object sender, MouseEventArgs e) { Control o = (Control)sender; if (e.Button == MouseButtons.Left) { o.Left += e.X - move.X; o.Top += e.Y - move.Y; } } void lableMouseUp(object sender, MouseEventArgs e) { foreach (Label l in flowLayoutPanel1.Controls) { if ((flowLayoutPanel1.Location.X + l.Right) > flowLayoutPanel1.Right) { flowLayoutPanel1.Controls.Remove(l); flowLayoutPanel2.Controls.Add(l); updateTotals(); } } foreach (Label l in flowLayoutPanel2.Controls) { if ((flowLayoutPanel2.Location.X + l.Left < flowLayoutPanel2.Left)) { flowLayoutPanel2.Controls.Remove(l); flowLayoutPanel1.Controls.Add(l); updateTotals(); } } } void labelBackgroundColour() { foreach (Label l in flowLayoutPanel1.Controls) { l.BackColor = Color.Yellow; } foreach (Label l in flowLayoutPanel2.Controls) { l.BackColor = Color.Yellow; } } void makeMoveable() { foreach (Label l in flowLayoutPanel1.Controls) { l.MouseDown += new MouseEventHandler(labelMouseDown); l.MouseMove += new MouseEventHandler(labelMouseMove); l.MouseUp += new MouseEventHandler(lableMouseUp); } foreach (Label l in flowLayoutPanel2.Controls) { l.MouseDown += new MouseEventHandler(labelMouseDown); l.MouseMove += new MouseEventHandler(labelMouseMove); l.MouseUp += new MouseEventHandler(lableMouseUp); } } } }
Что я уже пробовал:
Я смог создать это с помощью groupboxs и других контейнеров, но боролся с этим. Я поставил добавленный код, который OnMouseUp, если метка находится справа от контейнера, удаляет ее из первого контейнера и добавляет во второй. но с flowLayoutPanels он продолжает привязывать его обратно к выбору макета, когда пользователь пытается переместить его.
BillWoodruff
Пожалуйста, уточните:
1. вы с помощью перетаскивания код, как вы протестировали, и она работает с помощью перетаскивания/удаление метки из одного контейнера в другой ?
2. Когда вы перетаскиваете метку в границы второй панели TableLayoutPanel: что вы наблюдаете ?
Вы понимаете, что когда добавленный / отброшенный элемент управления размещается на панели FlowLayoutPanel, то он автоматически обрабатывается ? Понимаете ли вы, что делает свойство расширения FlowBreak, которое FlowLayoutPanel предоставляет своим дочерним элементам управления ?
Member 12739829
1. Да, используя код dragdrop, который я тестировал, он работает, однако если бы я не "suspendlayout ()", то каждый раз, когда объект перетаскивался, он продолжал бы возвращаться в исходное положение. теперь, когда я использую " suspendlayout ()", он этого не делает.
2. Когда я перетаскиваю метку в границы, она "удаляет" ее с первой панели и "добавляет" ко второй