Control.GiveFeedback Событие
Определение
Важно!
Некоторые сведения относятся к предварительной версии продукта, в которую до выпуска могут быть внесены существенные изменения. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.
Происходит во время операции перетаскивания.
public:
event System::Windows::Forms::GiveFeedbackEventHandler ^ GiveFeedback;
public event System.Windows.Forms.GiveFeedbackEventHandler GiveFeedback;
public event System.Windows.Forms.GiveFeedbackEventHandler? GiveFeedback;
member this.GiveFeedback : System.Windows.Forms.GiveFeedbackEventHandler
Public Custom Event GiveFeedback As GiveFeedbackEventHandler
Тип события
Примеры
В следующем примере кода демонстрируется операция перетаскивания между двумя элементами управления ListBox. В примере вызывается метод DoDragDrop при запуске действия перетаскивания. Действие перетаскивания начинается, если мышь перемещает больше SystemInformation.DragSize из расположения мыши во время события MouseDown. Метод IndexFromPoint используется для определения индекса элемента для перетаскивания во время события MouseDown
.
В примере также показано использование пользовательских курсоров для операции перетаскивания. В примере требуется, чтобы два файла курсора, 3dwarro.cur
и 3dwno.cur
, существуют в каталоге приложения для настраиваемых курсоров перетаскивания и без перетаскивания соответственно. Пользовательские курсоры будут использоваться при проверке UseCustomCursorsCheck
CheckBox. Пользовательские курсоры задаются в обработчике событий GiveFeedback.
Состояние клавиатуры вычисляется в обработчике событий DragOver для правой ListBox
, чтобы определить, какая операция перетаскивания будет зависеть от состояния клавиш SHIFT, CTRL, ALT или CTRL+ALT. Расположение в ListBox
, где будет происходить удаление, также определяется во время события DragOver
. Если данные для удаления не являются String
, DragEventArgs.Effect устанавливается None
в DragDropEffects. Наконец, состояние удаления отображается в DropLocationLabel
Label.
Данные, которые нужно удалить для правой ListBox
, определяются в обработчике событий DragDrop, а значение String
добавляется в соответствующее место в ListBox
. Если операция перетаскивания перемещается за пределы формы, операция перетаскивания отменяется в обработчике событий QueryContinueDrag.
Этот фрагмент кода демонстрирует использование события GiveFeedback. См. метод DoDragDrop для полного примера кода.
void ListDragSource_GiveFeedback( Object^ /*sender*/, System::Windows::Forms::GiveFeedbackEventArgs^ e )
{
// Use custom cursors if the check box is checked.
if ( UseCustomCursorsCheck->Checked )
{
// Sets the custom cursor based upon the effect.
e->UseDefaultCursors = false;
if ( (e->Effect & DragDropEffects::Move) == DragDropEffects::Move )
::Cursor::Current = MyNormalCursor;
else
::Cursor::Current = MyNoDropCursor;
}
}
private void ListDragSource_GiveFeedback(object sender, GiveFeedbackEventArgs e)
{
// Use custom cursors if the check box is checked.
if (UseCustomCursorsCheck.Checked)
{
// Sets the custom cursor based upon the effect.
e.UseDefaultCursors = false;
if ((e.Effect & DragDropEffects.Move) == DragDropEffects.Move)
Cursor.Current = MyNormalCursor;
else
Cursor.Current = MyNoDropCursor;
}
}
Private Sub ListDragSource_GiveFeedback(ByVal sender As Object, ByVal e As GiveFeedbackEventArgs) Handles ListDragSource.GiveFeedback
' Use custom cursors if the check box is checked.
If (UseCustomCursorsCheck.Checked) Then
' Set the custom cursor based upon the effect.
e.UseDefaultCursors = False
If ((e.Effect And DragDropEffects.Move) = DragDropEffects.Move) Then
Cursor.Current = MyNormalCursor
Else
Cursor.Current = MyNoDropCursor
End If
End If
End Sub
Комментарии
Событие GiveFeedback возникает при запуске операции перетаскивания. При использовании события GiveFeedback источник события перетаскивания может изменить внешний вид указателя мыши, чтобы предоставить пользователю визуальный отзыв во время операции перетаскивания.
Ниже описывается, как и когда возникают события, связанные с операциями перетаскивания.
Метод DoDragDrop определяет элемент управления в текущем расположении курсора. Затем он проверяет, является ли элемент управления допустимым целевым объектом удаления.
Если элемент управления является допустимым объектом удаления, событие GiveFeedback вызывается с заданным эффектом перетаскивания. Список эффектов перетаскивания см. в перечислении DragDropEffects.
Отслеживаются изменения положения курсора мыши, состояния клавиатуры и кнопки мыши.
Если пользователь выходит из окна, вызывается событие DragLeave.
Если мышь входит в другой элемент управления, вызывается DragEnter для этого элемента управления.
Если мышь перемещается, но остается в одном элементе управления, вызывается событие DragOver.
При изменении состояния клавиатуры или кнопки мыши вызывается событие QueryContinueDrag и определяет, следует ли продолжать перетаскивание, удалять данные или отменять операцию на основе значения свойства ActionQueryContinueDragEventArgsсобытия.
Если значение DragAction равно
Continue
, событие DragOver вызывается для продолжения операции, а событие GiveFeedback вызывается с новым эффектом, чтобы можно было задать соответствующую визуальную обратную связь. Список допустимых эффектов удаления см. в перечислении DragDropEffects.Заметка
События DragOver и GiveFeedback связаны таким образом, чтобы при перемещении мыши по целевому объекту удаления пользователь получил наиболее up-to-date отзыв о положении мыши.
Если значение DragAction равно
Drop
, значение эффекта удаления возвращается источнику, поэтому исходное приложение может выполнить соответствующую операцию с исходными данными; Например, вырезать данные, если операция была перемещением.Если значение DragAction равно
Cancel
, вызывается событие DragLeave.
Дополнительные сведения об обработке событий см. в обработке и вызове событий.