BeginnerCoderPete Ответов: 1

Как определить, удерживается ли кнопка нажатой, а не нажатой?


В своей форме я перемещаю объекты, выбирая их, а затем используя кнопки вверх, вниз, влево, вправо, чтобы переместить их.

Вместо того чтобы делать одно движение за клик, Я хотел бы иметь возможность удерживать кнопку нажатой, и она продолжает перемещать объект до тех пор, пока кнопка больше не будет нажата.

Я думал, что это будет просто, я действительно не хочу использовать таймеры для событий Mouse Down и Mouse Up (если только это не единственный способ сделать это)

Ищу альтернативные идеи.

Что я уже пробовал:

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

Richard Deeming

Может быть, что-то вроде этого?
Кнопка автоматического повтора через 10 минут[^]

BeginnerCoderPete

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

1 Ответов

Рейтинг:
2

Graeme_Grant

То MouseDown и MouseMove события контроля. Вот пример (на C#), который легко понять и демонстрирует метод: location-перемещение элемента управления путем перетаскивания его мышью в C# - Stack Overflow[^] что переводится как:

Private MouseDownLocation As Point

Private Sub pictureBox1_MouseDown(sender As Object, e As MouseEventArgs)
	If e.Button = System.Windows.Forms.MouseButtons.Left Then
		MouseDownLocation = e.Location
	End If
End Sub

Private Sub pictureBox1_MouseMove(sender As Object, e As MouseEventArgs)
	If e.Button = System.Windows.Forms.MouseButtons.Left Then
		pictureBox1.Left = e.X + pictureBox1.Left - MouseDownLocation.X
		pictureBox1.Top = e.Y + pictureBox1.Top - MouseDownLocation.Y
	End If
End Sub


BeginnerCoderPete

К сожалению, объекты, которые я перемещаю, находятся на элементе управления, который вообще не имеет событий щелчка или событий мыши, кроме "MouseCaptureChanged", который на самом деле не работает со стороны элемента управления, который мне нужен. Если это поможет,то это элемент управления ActiveX Synrad WinMark Pro.

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

Graeme_Grant

Вышеприведенное решение должно быть поддержано. Вам нужно связаться с автором "Synrad WinMark Pro ActiveX control" и спросить его, как это сделать.

BeginnerCoderPete

Я был в контакте с Synrad, и представитель, с которым я разговаривал, знает, что для элемента управления нет событий щелчка или событий мыши, его объяснение состояло в том, что он действительно используется только для предварительного просмотра изображения, которое должно быть вытравлено. Хотя все методы существуют для выбора и перемещения отдельных объектов.

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

Поэтому моей альтернативой было использовать кнопки, я просто хотел лучше, чем 1 ход за клик. У меня есть возможность увеличить расстояние, на которое перемещается объект за один клик, но я все равно предпочел бы просто удерживать кнопку нажатой, если бы хотел переместить объект далеко.

Graeme_Grant

Почему бы не иметь "режим редактирования"? Затем, когда активен "режим редактирования", есть элементы управления, которые" украшают " элемент управления Synad, чтобы разрешить настройки, немного похожие на панель управления Microsoft - у него есть drag adorner в левом верхнем углу окна конструктора форм.

BeginnerCoderPete

Хорошо, я посмотрю на "украшение" - это термин, с которым я еще не сталкивался, так что не совсем уверен, но у меня есть приблизительная идея, и я думаю, что у меня была идея, но тогда я понятия не имел, как это сделать. Я посмотрю, спасибо за совет.

Graeme_Grant

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

Поместите элемент управления панели на форму и попробуйте переместить его ... вам придется использовать ручку "adorner"...

BeginnerCoderPete

Спасибо, в этом так много смысла. Если я смогу прикрепить его к своему объекту Synrad, я буду смеяться, я сообщу, когда я либо сделал это, либо потерпел неудачу. Очень ценю вашу помощь! Спасибо.

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

Graeme_Grant

Украшатель-это концепция, а не фактический контроль. Вам нужно программно расположить элементы управления вокруг объекта Synrad и управлять событиями...

Взгляните на статью Марка: FlowSharp[^]- он называет украшения "ручками захвата" - посмотрите, как он их реализует...

BeginnerCoderPete

Сначала я не увидел этого ответа, Спасибо.

BeginnerCoderPete

Я использую Winforms, а не WPF, или украшение все еще возможно на Winforms?

Graeme_Grant

Да, Winforms, а не WPF. Украшатели в WPF выполняют несколько иную задачу...

BeginnerCoderPete

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

Graeme_Grant

Посмотрите на мой последний комментарий re: "ручки захвата"...

BeginnerCoderPete

Мне придется по-настоящему сесть и прочесть. Я не могу найти, где он их создает и прикрепляет к чему-либо с первого взгляда. У меня все еще есть ощущение, что это немного выше моего понимания в данный момент :( чтение через это кажется ошеломляющим.