зная, отпущена ли левая кнопка мыши в том же списке - PullRequest
0 голосов
/ 21 сентября 2011

У меня есть два списка, один для доступных элементов и один для выбранных элементов, так что пользователь может перемещать элементы между этими двумя объектами либо перетаскиванием, либо двойным щелчком. Это не идеальный код, и большая часть логики написана в событии MouseMove, где я также могу иметь X и Y местоположения мыши ... Я ищу этот сценарий, чтобы предотвратить его: пользователь держит левую кнопку мыши в левом списке и выберите элемент, НО он снова отпускает кнопку мыши в том же списке, поэтому мне нужен способ узнать, находится ли он в том же списке, а затем не делать перетаскивание ... скажите мне границы списка, который я могу использовать? или какие-нибудь другие лучшие мысли, которые у вас есть?

private void lstAvailable_MouseMove(Object eventSender, MouseEventArgs eventArgs)
{
    //*************** FUNCTION DETAILS ***************
    //User moves mouse in the Available list
    //***************** INSTRUCTIONS *****************
    MouseButtons Button = eventArgs.Button;
    int Shift = (int)Control.ModifierKeys / 0x10000;
    float X = (float)VB6.PixelsToTwipsX(eventArgs.X);
    float Y = (float)VB6.PixelsToTwipsY(eventArgs.Y);
    moDualListBox.List1_MouseMove(Button, Shift, X, Y);


    if (eventArgs.Button == MouseButtons.Left )
    {
        if (!mbClickProcessed) // it is a DragDrop
        {
            this.lstAvailable.DoDragDrop(this.lstAvailable.SelectedItems, DragDropEffects.Move);
            mbClickProcessed = true;
        }
        if (mbClickProcessed) // it is a DoubleClick
        {
            MoveClick();
            MoveLostFocus();
            mbClickProcessed = true;
        }
    }
}

Ответы [ 2 ]

1 голос
/ 21 сентября 2011

Образец для перетаскивания (без проверки ошибок):

private ListBox _DraggingListBox = null;

private void listBox1_DragDrop(object sender, DragEventArgs e)
{
  if (_DraggingListBox != listBox1)
    MoveItem(listBox2, listBox1, (int)e.Data.GetData(typeof(int)));
}

private void listBox1_MouseDown(object sender, MouseEventArgs e)
{
  _DraggingListBox = listBox1;
  listBox1.DoDragDrop(listBox1.IndexFromPoint(e.X,e.Y), DragDropEffects.Move);    
}

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

private void listBox2_DragDrop(object sender, DragEventArgs e)
{
  if (_DraggingListBox != listBox2)
    MoveItem(listBox1, listBox2, (int)e.Data.GetData(typeof(int)));
}

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

private void listBox2_MouseDown(object sender, MouseEventArgs e)
{
  _DraggingListBox = listBox2;
  listBox2.DoDragDrop(listBox2.IndexFromPoint(e.X,e.Y), DragDropEffects.Move);
}

private void MoveItem(ListBox fromLB, ListBox toLB, int index)
{
  toLB.Items.Add(fromLB.Items[index]);
  fromLB.Items.RemoveAt(index);
}
0 голосов
/ 21 сентября 2011

Если вы перехватываете событие DragDrop, у вас есть отправитель операции перетаскивания.
Таким образом, вы можете легко отказаться от операции (или ничего не делать), если отправитель совпадает с контролем пункта назначения ...

Если вы хотите узнать, покидает ли мышь элемент управления (и установить переменную в соответствии с этим), вы можете поймать событие MouseLeave, в то время как событие MouseEnter удобно знать, когда мышь входит в элемент управления другого элемента.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...