#c# #.net #winforms #events #cursor
#c# #.net #winforms #Мероприятия #курсор
Вопрос:
В моем приложении winforms у меня есть функция, которая открывает выпадающее меню, и вы перемещаете курсор влево или вправо, чтобы выбрать дополнительный параметр. Но я не хочу, чтобы курсор перемещался, я просто хочу, чтобы сами подпараметры перемещались влево или вправо (в зависимости от того, в каком направлении пытается двигаться мышь). Я надеюсь, что это имеет смысл для вас.
Кто-нибудь знает, как остановить перемещение курсора в определенном направлении, сохраняя при этом возможность фиксировать события перемещения мыши, пока пользователь «перемещает» мышь?
Любая помощь приветствуется, спасибо!
Ответ №1:
Вам не следует пытаться реализовать это, поскольку это нарушает все стандарты пользовательского интерфейса и просто запутает пользователя. Не вашему приложению решать, куда должна перемещаться мышь. Если вы хотите реализовать какой-либо другой способ разрешить выбор навигации, я бы предложил изучить другие варианты.
Комментарии:
1. Эта функция была запрошена моим клиентом.
2. Тогда ваша задача, как опытного разработчика, убедить его, что это очень плохая идея, почему это плохая идея, и представить несколько альтернатив, которые соответствуют лучшим практикам. Вы профессионал, вот почему они являются клиентом.
3. Я понимаю это и в какой-то степени согласен. Хотя, если отбросить «лучшие» практики, я действительно не понимаю, почему эта конкретная идея является плохой практикой. Я уже реализовал это, и мои мысли по этому поводу таковы: 1: Этого хочет клиент, 2: это выглядит действительно круто и хорошо сочетается с интерфейсом, 3: Это работает и 4: Требуется меньше движений руки для навигации по горизонтальному меню. Не могли бы вы объяснить, почему это плохая практика для этого? Я, очевидно, чего-то не хватает…
4. Во-первых, рад, что вам удалось добиться того, что вы хотите сделать. Что касается того, почему это плохая идея, ну, в основном потому, что мышь является частью общей операционной системы, а не только для вашего приложения. Ваше приложение не должно влиять на поведение глобальных объектов, поскольку оно предоставляет пользователю непоследовательный подход. Во-вторых, если ваше приложение завершило работу с ошибкой, и вы внедрили какое-либо подключение или ограничение для мыши, то это может повлиять на остальную часть операционной системы. Что касается того, чего хотят клиенты, я думаю, что это работа разработчика — консультировать и информировать, а также разрабатывать: clientsfromhell.net
Ответ №2:
Я не думаю, что вам вообще следует внедрять такое решение.
Но хорошо, вы могли бы вернуть положение курсора мыши в исходное положение в обработчике перемещения мыши. Но вы должны удалить обработчик, прежде чем возвращать положение и добавлять их снова после этого. Вы можете установить положение мыши с помощью PInvoke. Как это сделать, вы можете найти здесь http://pinvoke.net/default.aspx/user32.mouse_event
Комментарии:
1. Спасибо @DanielB.. Проверяю ссылку сейчас 🙂
Ответ №3:
Вы можете установить положение курсора вручную
private void Form1_MouseMove(object sender, MouseEventArgs e)
{
Cursor.Position = new Point(400,400);
Console.WriteLine("fired");
}
Комментарии:
1. Спасибо, @Stecya, я действительно думал об этом, но, думаю, я просто подумал, что будет более … Не знаю, более правильный способ сделать это? Но опять же, я не понимаю, почему этот способ также не был бы правильным.. Спасибо 🙂
2. Это так просто? Почему я использовал PInvoke для этого всегда oO
3. Да 🙂 Но, может быть, в разных версиях Win OS это может быть не так просто??? Должна быть причина, по которой вам пришлось использовать PInvoke 🙂