Member 10741737 Ответов: 1

Переместить флажок в список флажков в C#


int itemIndex = 0;
       private void Form1_Load(object sender, EventArgs e)
       {
           checkedListBox1.Items.Add("Item 1");
           checkedListBox1.Items.Add("Item 2");
           checkedListBox1.Items.Add("Item 3");
           checkedListBox1.Items.Add("Item 4");
           checkedListBox1.Items.Add("Item 5");
           checkedListBox1.Items.Add("Item 6");
       }

       private void checkedListBox1_MouseDown(object sender, MouseEventArgs e)
       {
           CheckedListBox clb = sender as CheckedListBox;
           itemIndex = clb.IndexFromPoint(e.X, e.Y);
           if (itemIndex >= 0 & e.Button == MouseButtons.Left)
           {
               clb.DoDragDrop(clb.Items[itemIndex], DragDropEffects.Move);
           }
       }

       private void checkedListBox1_DragDrop(object sender, DragEventArgs e)
       {
           if (e.Data.GetDataPresent(typeof(System.String)))
           {
               e.Effect = DragDropEffects.Move;
           }
           else
           {
               e.Effect = DragDropEffects.None;
           }

       }

       private void checkedListBox1_DragOver(object sender, DragEventArgs e)
       {
           CheckedListBox clbSender = sender as CheckedListBox;
           clbSender.Items.Add(e.Data.GetData(typeof(System.String)).ToString());

           if (clbSender.Name == "checkedListBoxA")
               checkedListBox1.Items.RemoveAt(itemIndex);
           else
               checkedListBox1.Items.RemoveAt(itemIndex);

       }
   }


Что я уже пробовал:

я попробовал вышеприведенный код, но он не работает.

Garth J Lancaster

"это не работает" .. что это значит ? (мы не можем видеть ваш экран, читать ваши мысли)... от вас нет никакого реального объяснения того, что вы пытаетесь сделать, и почему "это не работает"

Пожалуйста, используйте Улучшить вопрос чтобы обновить свой вопрос и предоставить более подробную информацию

Member 10741737

Я хочу переместить флажок в список флажков.Я использовал события списка чекбоксов, такие как checkedListBox1_DragDrop,checkedListBox1_DragOver, но он не перемещал флажок.

1 Ответов

Рейтинг:
2

CHill60

Первая проблема-это код в DragOver событие должно быть в DragDrop событие и наоборот. Есть также некоторые незначительные проблемы с этим кодом.

Нет необходимости в переменной уровня модуля itemIndex просто объявите и вычислите его, когда вам это нужно.

Это ваш код, измененный для работы (а также для копирования проверенного состояния элемента). Примечание. Если вы хотите, чтобы пользователь мог устанавливать флажки, вам нужно будет установить CheckOnClick в True.

private void checkedListBox1_MouseDown(object sender, MouseEventArgs e)
{
    CheckedListBox clb = sender as CheckedListBox;

    var itemIndex = clb.IndexFromPoint(e.X, e.Y);
    if (itemIndex >= 0 & e.Button == MouseButtons.Left)
    {
        clb.DoDragDrop(clb.Items[itemIndex], DragDropEffects.Move);
    }
}

private void checkedListBox1_DragDrop(object sender, DragEventArgs e)
{

    CheckedListBox clbSender = sender as CheckedListBox;

    if (clbSender == null) return;

    var point = clbSender.PointToClient(new Point(e.X, e.Y));
    var index = clbSender.IndexFromPoint(point);
    if (index < 0) index = clbSender.Items.Count - 1;

    var data = clbSender.SelectedItem;
    var isChecked = clbSender.GetItemChecked(clbSender.SelectedIndex);

    clbSender.Items.RemoveAt(clbSender.SelectedIndex);
    clbSender.Items.Insert(index, data);
    clbSender.SetItemChecked(index, isChecked);
}

private void checkedListBox1_DragOver(object sender, DragEventArgs e)
{
    if (e.Data.GetDataPresent(typeof(System.String)))
        e.Effect = DragDropEffects.Move;
    else
        e.Effect = DragDropEffects.None;
}