Drag Drop не работает - PullRequest
       2

Drag Drop не работает

0 голосов
/ 12 января 2012

в форме окон у меня есть Listview и FlowLayoutPanel

Я хочу перетащить из списка в FlowLayoutPanel, чтобы

в списке просмотра я использую событие DragEnter

private void listViewGUI_DragEnter(object sender, DragEventArgs e)
        {
}

и в панели FlowLayout я активирую DragDrop

private void fpnlDisplayedGUI_DragDrop(object sender, DragEventArgs e)
        {
}

проблема в том, что это не работает, ни один из них не входит ни в одно из этих событий, любая идея, как заставить их войти, я пропускаю какое-либо свойство

С наилучшими пожеланиями

Ответы [ 2 ]

2 голосов
/ 12 января 2012

Вы помещаете событие DragEnter в неправильный элемент управления, вы должны использовать панель.Я думаю, я знаю, как вы попали в эту проблему, ListView не имеет никакого события, которое указывает, что пользователь начал перетаскивать элемент.Вам нужно будет синтезировать это самостоятельно.Основной подход состоит в том, чтобы записать положение мыши и использовать событие MouseMove, чтобы проверить, достаточно ли пользователь переместил мышь, чтобы начать перетаскивание.Как это:

    private Point dragMousePos;

    private void listView1_MouseDown(object sender, MouseEventArgs e) {
        if (e.Button == MouseButtons.Left) dragMousePos = e.Location;
    }

    private void listView1_MouseMove(object sender, MouseEventArgs e) {
        if (e.Button == MouseButtons.Left) {
            int dx = Math.Abs(e.X - dragMousePos.X);
            int dy = Math.Abs(e.Y - dragMousePos.Y);
            if (dx >= SystemInformation.DoubleClickSize.Width ||
                dy >= SystemInformation.DoubleClickSize.Height) {
                var item = listView1.GetItemAt(dragMousePos.X, dragMousePos.Y);
                if (item != null) listView1.DoDragDrop(item, DragDropEffects.Move);
            }
        }
    }
2 голосов
/ 12 января 2012

Ниже приведен простой пример, показывающий основы того, что вам нужно:

public Form1()
{
    InitializeComponent();

    panel1.MouseDown += new MouseEventHandler(panel1_MouseDown);
    panel2.AllowDrop = true;
    panel2.DragEnter += new DragEventHandler(panel2_DragEnter);
    panel2.DragDrop += new DragEventHandler(panel2_DragDrop);
}

void panel2_DragDrop(object sender, DragEventArgs e)
{
    //handle the drop here.
}

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

void panel1_MouseDown(object sender, MouseEventArgs e)
{
    panel1.DoDragDrop("whatever you want draged.", DragDropEffects.Move);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...