2010-05-21 2 views
1

У меня странная проблема, что я надеюсь, что кто-то, возможно, испытал/имел некоторые предложения.Windows, удерживающая курсор перетаскивания

Я использую стороннюю библиотеку (GoDiagram), которая, кратко отразив ее, я не думаю, что это причина проблемы. Случается, что я перетаскиваю файл на фоновый холст, который наследуется от класса Control. При перетаскивании файла над холстом курсор меняется на «перетаскиваемый» курсор, который, как я уверен, просто обрабатывается базовым элементом управления, а не самим холстом.

В этот момент холст вызывает событие, к которому я подключен. Это событие отображает модальный диалог. В этот момент курсор является обычной стрелкой. Однако, если я возвращаю фокус на рабочий стол, мой курсор все еще находится в состоянии «перетаскивания», и я не могу фактически взаимодействовать с любыми значками на рабочем столе.

Кто-нибудь знает, почему может произойти что-то подобное? Или кто-нибудь знает, как я могу заставить курсор вернуться? Странная вещь - это похоже на то, что курсор Windows не работает, и что курсор в моем приложении с этой точки в порядке. Если я закрою диалоговое окно, курсор вернется к нормальному курсу, где бы я ни был, как вы ожидали.

Приветствия

+0

Для тех, кто работает в той же проблеме, посмотрите [этот ответ] (http://stackoverflow.com/a/21407496/1576119). Думаю, это одно и то же; ShowDialog с блоком DragDrop от завершения. –

ответ

0

Обычно, когда вы измените тип курсора, сначала сохранить предыдущее состояние курсора; измените на новый тип курсора, выполните работу, а затем, после того, как вы закончите, измените курсор на предыдущий тип курсора. Таким образом, каждый пользователь (каждое приложение) получает возможность манипулировать типом курсора при соблюдении других приложений.

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

Итак, что вы можете сделать, это change the cursor type вручную, когда это диалоговое окно закрывается.

--EDIT--

перечитываю свой вопрос; и я совершенно не уверен (сейчас), если правильно понимаю вас.

Как я понял, событие, на которое вы подключены, отображает диалоговое окно, так значит ли это, что вы показываете модальное диалоговое окно?

Если да, то пытались ли вы манипулировать событиями .MouseEnter и .MouseLeave для управления типом курсора.

+0

Не думаю, что вы вполне следовали за KMan. Курсор изменится правильно, когда диалоговое окно закрывается. Это пока диалог открыт (открывается в приемнике событий DragDrop) и оставляет курсор в этом состоянии, когда я нажимаю на рабочий стол, пока диалог все еще открыт. – Ian

+0

@Ian: См. Мое редактирование в ответ на ваш комментарий. –

Смежные вопросы