Переупорядочить поле списка winforms с помощью перетаскивания?

Как часто вы запускали свой код? Запустить ваш код один раз не имеет статистического значения. Ресурсы исполняющих машин не являются эксклюзивными для вашего кода!

37
задан Gareth Simpson 30 April 2009 в 02:42
поделиться

3 ответа

Вот быстрое и грязное приложение. В основном я создал форму с кнопкой и ListBox. При нажатии кнопки ListBox заполняется датой следующих 20 дней (нужно было что-то использовать только для тестирования). Затем он позволяет перетаскивать в ListBox для переупорядочения:

    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);
        }
80
ответ дан 27 November 2019 в 04:22
поделиться

В первый раз это занимает несколько часов, если вы никогда не выполняли перетаскивание, хотите сделать все правильно и должны прочитать документы. Особенно немедленная обратная связь и восстановление списка, если пользователь отменяет операцию, требуют некоторых мыслей. Инкапсуляция поведения в многократно используемый пользовательский элемент управления также займет некоторое время.

Если вы вообще никогда не выполняли перетаскивание, посмотрите на этот пример перетаскивания из MSDN. Это было бы хорошей отправной точкой, и вам может понадобиться полдня, чтобы все заработало.

3
ответ дан 27 November 2019 в 04:22
поделиться

Альтернативой является использование элемента управления list-view , который используется Explorer для отображения содержимого папок. Это сложнее, но реализует перетаскивание элементов.

0
ответ дан 27 November 2019 в 04:22
поделиться
Другие вопросы по тегам:

Похожие вопросы: