Нестабильная работа кода

195
09 мая 2018, 01:53

В соседней теме мне помогли с кодом для перемещения элементов внутри таблицы. По-началу всё работает замечательно, но потом постоянно то другие элементы сдвигаются, то не заменяется.

Я два дня всё крутил-вертел, но результата не дало.

Сам код:

public partial class Form2 : Form {
    TableLayoutPanel tableLayoutPanel;
    public Form2() {
        //InitializeComponent();
        Width = 500;
        tableLayoutPanel = new TableLayoutPanel {
            Parent = this,
            Dock = DockStyle.Top,
            AllowDrop = true,
            ColumnCount = 1,
            Height = 600
        };
        for (int i = 0; i < 15; i++) {
            var button = new Button { Parent = tableLayoutPanel, Text = "" + i };
            button.MouseDown += Button_MouseDown;
            button.MouseMove += Button_MouseMove;
            button.MouseUp += Button_MouseUp;
            button.MouseClick += Button_MouseClick;
        }
        tableLayoutPanel.DragOver += TableLayoutPanel_DragOver;
    }
    private void Button_MouseDown(object sender, MouseEventArgs e) {
        ((Button)sender).Tag = new object();
    }
    private void Button_MouseMove(object sender, MouseEventArgs e) {
        var button = (Button)sender;
        if (button.Tag != null)
            button.DoDragDrop(sender, DragDropEffects.Move);
    }
    private void Button_MouseUp(object sender, MouseEventArgs e) {
        ((Button)sender).Tag = null;
    }
    private void Button_MouseClick(object sender, MouseEventArgs e) {
        Text = ((Control)sender).Text;
    }
    private void TableLayoutPanel_DragOver(object sender, DragEventArgs e) {
        if (!e.Data.GetDataPresent(typeof(Button)))
            return;
        e.Effect = e.AllowedEffect;
        var draggedButton = (Button)e.Data.GetData(typeof(Button));
        var pt = tableLayoutPanel.PointToClient(new Point(e.X, e.Y));
        var button = (Button)tableLayoutPanel.GetChildAtPoint(pt);
        if (button != null) {
            var pos = tableLayoutPanel.GetPositionFromControl(button);
            tableLayoutPanel.Controls.Add(draggedButton, pos.Column, pos.Row);
            draggedButton.Tag = null;
        }
    }
}

Где косяк, и как его исправить?

READ ALSO
Распределение элементов по трем кучам с минимальной разницей

Распределение элементов по трем кучам с минимальной разницей

Необходимо достичь минимальной возможной разницы между суммами значений элементов в кучках

174
Как реализовать Bcrypt в C#?

Как реализовать Bcrypt в C#?

Использую MD5, но слышал, что Bcrypt намного надежнее, но вот не могу найти алгоритм, как его реализовать в C#Может кто-нибудь может мне показать...

155
Найти повторяющиеся слова в тексте и посчитать количество повторений каждого из слов C#

Найти повторяющиеся слова в тексте и посчитать количество повторений каждого из слов C#

Оффтоп: я новичок, пытаюсь постигать язык программирования, но мне как самоучке это не быстро идетСуть задачи: есть текстовый файл (лог от программы,...

305
Считывание выбранного элемента из XML (XDocument)

Считывание выбранного элемента из XML (XDocument)

Какая команда в XDocument аналогична строке из xmlDocument: pictureBoxItem1ImageLocation = xmlDoc

201