Zmienić kolejność listy winforms za pomocą przeciągania i upuszczania?

Czy to prosty proces?

Piszę tylko szybki hacky UI dla wewnętrznego narzędzia.

Nie chcę na to spędzać wieku.

Author: Gareth Simpson, 2009-04-30

4 answers

Oto szybka i brudna aplikacja. Zasadniczo stworzyłem formularz z przyciskiem i Listboxem. Po kliknięciu przycisku lista zostanie wypełniona datą następnych 20 dni (musiałem użyć czegoś tylko do testowania). Następnie umożliwia przeciąganie i upuszczanie wewnątrz ListBox w celu zmiany kolejności:

    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
            this.listBox1.AllowDrop = true;
        }

        private void button1_Click(object sender, EventArgs e)
        {
            for (int i = 0; i <= 20; i++)
            {
                this.listBox1.Items.Add(DateTime.Now.AddDays(i));
            }
        }

        private void listBox1_MouseDown(object sender, MouseEventArgs e)
        {
            if (this.listBox1.SelectedItem == null) return;
            this.listBox1.DoDragDrop(this.listBox1.SelectedItem, DragDropEffects.Move);
        }

        private void listBox1_DragOver(object sender, DragEventArgs e)
        {
            e.Effect = DragDropEffects.Move;
        }

        private void listBox1_DragDrop(object sender, DragEventArgs e)
        {
            Point point = listBox1.PointToClient(new Point(e.X, e.Y));
            int index = this.listBox1.IndexFromPoint(point);
            if (index < 0) index = this.listBox1.Items.Count-1;
            object data = e.Data.GetData(typeof(DateTime));
            this.listBox1.Items.Remove(data);
            this.listBox1.Items.Insert(index, data);
        }
 73
Author: BFree,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-07-02 16:07:05

Pierwszy raz zajmuje kilka godzin, jeśli nigdy nie zaimplementowano przeciągnij i upuść, chcesz zrobić to dobrze i trzeba przeczytać dokumenty. Zwłaszcza natychmiastowa informacja zwrotna i przywrócenie listy, jeśli Użytkownik anuluje operację, wymagają pewnych przemyśleń. Włączenie zachowania do kontrolki wielokrotnego użytku również zajmie trochę czasu.

Jeśli nigdy nie wykonywałeś przeciągania i upuszczania, spójrz na ten Przykład przeciągania i upuszczania z MSDN. To byłby dobry punkt wyjścia i zajmie ci to może pół dnia, zanim to zadziała.

 3
Author: Daniel Brückner,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-04-30 03:07:59

7 Lat Spóźnienia. Ale dla każdego nowego, oto kod.

private void listBox1_MouseDown(object sender, MouseEventArgs e)
    {
        if (this.listBox1.SelectedItem == null) return;
        this.listBox1.DoDragDrop(this.listBox1.SelectedItem, DragDropEffects.Move);
    }

    private void listBox1_DragOver(object sender, DragEventArgs e)
    {
        e.Effect = DragDropEffects.Move;
    }

    private void listBox1_DragDrop(object sender, DragEventArgs e)
    {
        Point point = listBox1.PointToClient(new Point(e.X, e.Y));
        int index = this.listBox1.IndexFromPoint(point);
        if (index < 0) index = this.listBox1.Items.Count - 1;
        object data = listBox1.SelectedItem;
        this.listBox1.Items.Remove(data);
        this.listBox1.Items.Insert(index, data);
    }

    private void itemcreator_Load(object sender, EventArgs e)
    {
        this.listBox1.AllowDrop = true;
    }
 3
Author: Wally Modz,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-11-12 03:09:28

Alternatywą jest użycie kontrolki list-view , której Eksplorator używa do wyświetlania zawartości folderów. Jest to bardziej skomplikowane, ale implementuje przeciąganie elementów dla Ciebie.

 0
Author: Simon Buchan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-04-30 03:39:25