Control.QueryContinueDrag Evento

Definição

Ocorre durante uma operação do tipo arrastar e soltar e permite que a fonte de arrastar determine se a operação do tipo arrastar e soltar deve ser cancelada.

public:
 event System::Windows::Forms::QueryContinueDragEventHandler ^ QueryContinueDrag;
public event System.Windows.Forms.QueryContinueDragEventHandler QueryContinueDrag;
public event System.Windows.Forms.QueryContinueDragEventHandler? QueryContinueDrag;
member this.QueryContinueDrag : System.Windows.Forms.QueryContinueDragEventHandler 
Public Custom Event QueryContinueDrag As QueryContinueDragEventHandler 

Tipo de evento

Exemplos

Este trecho de código demonstra como usar o QueryContinueDrag evento para cancelar a operação de arrastar e soltar se a operação de arrastar se mover para fora dos limites do formulário. Consulte o DoDragDrop método para obter o exemplo de código completo.

void ListDragSource_QueryContinueDrag( Object^ sender, System::Windows::Forms::QueryContinueDragEventArgs^ e )
{
   // Cancel the drag if the mouse moves off the form.
   ListBox^ lb = dynamic_cast<ListBox^>(sender);
   if ( lb != nullptr )
   {
      Form^ f = lb->FindForm();

      // Cancel the drag if the mouse moves off the form. The screenOffset
      // takes into account any desktop bands that may be at the top or left
      // side of the screen.
      if ( ((Control::MousePosition.X - screenOffset.X) < f->DesktopBounds.Left) || ((Control::MousePosition.X - screenOffset.X) > f->DesktopBounds.Right) || ((Control::MousePosition.Y - screenOffset.Y) < f->DesktopBounds.Top) || ((Control::MousePosition.Y - screenOffset.Y) > f->DesktopBounds.Bottom) )
      {
         e->Action = DragAction::Cancel;
      }
   }
}
private void ListDragSource_QueryContinueDrag(object sender, QueryContinueDragEventArgs e)
{
    // Cancel the drag if the mouse moves off the form.
    ListBox lb = sender as ListBox;

    if (lb != null)
    {
        Form f = lb.FindForm();

        // Cancel the drag if the mouse moves off the form. The screenOffset
        // takes into account any desktop bands that may be at the top or left
        // side of the screen.
        if (((Control.MousePosition.X - screenOffset.X) < f.DesktopBounds.Left) ||
            ((Control.MousePosition.X - screenOffset.X) > f.DesktopBounds.Right) ||
            ((Control.MousePosition.Y - screenOffset.Y) < f.DesktopBounds.Top) ||
            ((Control.MousePosition.Y - screenOffset.Y) > f.DesktopBounds.Bottom))
        {
            e.Action = DragAction.Cancel;
        }
    }
}
Private Sub ListDragSource_QueryContinueDrag(ByVal sender As Object, ByVal e As QueryContinueDragEventArgs) Handles ListDragSource.QueryContinueDrag
    ' Cancel the drag if the mouse moves off the form.
    Dim lb As ListBox = CType(sender, ListBox)

    If (lb IsNot Nothing) Then

        Dim f As Form = lb.FindForm()

        ' Cancel the drag if the mouse moves off the form. The screenOffset
        ' takes into account any desktop bands that may be at the top or left
        ' side of the screen.
        If (((Control.MousePosition.X - screenOffset.X) < f.DesktopBounds.Left) Or
            ((Control.MousePosition.X - screenOffset.X) > f.DesktopBounds.Right) Or
            ((Control.MousePosition.Y - screenOffset.Y) < f.DesktopBounds.Top) Or
            ((Control.MousePosition.Y - screenOffset.Y) > f.DesktopBounds.Bottom)) Then

            e.Action = DragAction.Cancel
        End If
    End If
End Sub

Comentários

O evento QueryContinueDrag é acionado quando há uma alteração no estado do teclado ou do botão do mouse durante uma operação do tipo "arrastar e soltar". O evento QueryContinueDrag permite que a fonte de arrastar determine se a operação do tipo "arrastar e soltar" deve ser cancelada.

A seguir, descreve como e quando os eventos relacionados a operações de arrastar e soltar são gerados.

O DoDragDrop método determina o controle sob o local atual do cursor. Em seguida, ele verifica se o controle é um destino de soltar válido.

Se o controle for um destino de soltar válido, o GiveFeedback evento será gerado com o efeito de arrastar e soltar especificado. Para obter uma lista de efeitos de arrastar e soltar, consulte a DragDropEffects enumeração .

As alterações na posição do cursor do mouse, no estado do teclado e no estado do botão do mouse são controladas.

  • Se o usuário sair de uma janela, o DragLeave evento será gerado.

  • Se o mouse entrar em outro controle, o DragEnter para esse controle será gerado.

  • Se o mouse se mover, mas permanecer dentro do mesmo controle, o DragOver evento será gerado.

Se houver uma alteração no estado do botão do teclado ou do mouse, o QueryContinueDrag evento será acionado e determinará se deseja continuar o arrastar, remover os dados ou cancelar a operação com base no valor da Action propriedade do QueryContinueDragEventArgsevento.

  • Se o valor de DragAction for Continue, o DragOver evento será gerado para continuar a operação e o GiveFeedback evento será gerado com o novo efeito para que os comentários visuais apropriados possam ser definidos. Para obter uma lista de efeitos suspensos válidos, consulte a DragDropEffects enumeração .

    Observação

    Os DragOver eventos e GiveFeedback são emparelhados para que, à medida que o mouse se move pelo destino de soltar, o usuário recebe os comentários mais atualizados sobre a posição do mouse.

  • Se o valor de DragAction for Drop, o valor do efeito de queda será retornado à origem, para que o aplicativo de origem possa executar a operação apropriada nos dados de origem; por exemplo, recorte os dados se a operação for uma movimentação.

  • Se o valor de DragAction for Cancel, o DragLeave evento será gerado.

Por padrão, o QueryContinueDrag evento define Action como Cancel em DragAction se a tecla ESC foi pressionada e define Action como Drop em DragAction se o botão esquerdo, do meio ou do mouse direito for pressionado.

Para obter mais informações sobre como lidar com eventos, consulte Manipulando e gerando eventos.

Aplica-se a

Confira também