как сделать, нажмите и перетащите в приложение Winforms - PullRequest
1 голос
/ 27 июня 2009

У меня есть простое приложение winforms с несколькими элементами управления. Я хочу иметь возможность щелкать и перетаскивать из любой точки формы и перемещать весь набор элементов ( панорамирование ). Я уже разобрался с битом перестановки. Что мне еще нужно выяснить, так это как связать клик и перетащить в обновление моих смещений.

Что я пробовал до сих пор, так это добавление материала к событиям MouseDown, MouseUp и MouseMove основной формы (что-то вроде , что этот парень показывает ), но они не ' Вызывается (точки останова в них не попадают)

Что я делаю не так?


Редактировать: Я не ищу перетаскивания, так как мне не нужно ничего перетаскивать. То, что я хочу, будет работать со следующей спецификацией:

  • создать форму без элементов управления
  • установить переменные x и y, которые печатаются в заголовке формы при каждом обновлении
  • когда пользователь щелкает мышью и перетаскивает ее в любом месте формы, значения x и y обновляются для отражения движения указателя (нажатие и перетаскивание вниз и вправо приведут к x>0 и y>0)

Основываясь на комментариях Эрика, я думаю, что подключаюсь к событиям на неправильном контроле.

Есть ли способ (с использованием настроек, подобных элементам управления) перехватывать все события в одном месте, независимо от того, на что они должны быть отправлены? Или как насчет того, чтобы какие-либо неавтоматизированные события были связаны в цепочку? к родителю? В моем случае я никогда не позабочусь, что получило событие, так что это было бы то, что я хочу получить.

Ответы [ 2 ]

1 голос
/ 27 июня 2009

Как вы точно обрабатываете события мыши? Если у вас есть панель, закрывающая форму, события мыши формы не будут вызываться. Только события мыши панели будут.

0 голосов
/ 27 июня 2009

В Интернете есть несколько учебных пособий, посвященных Drag-and-Drop, таких как этот

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

...