|
179 / 69 / 13
Регистрация: 22.12.2015
Сообщений: 2,648
|
||||||
Как реализовать акселератор нажатия кнопки?25.10.2016, 06:57. Показов 3416. Ответов 30
Метки нет (Все метки)
Всем здравствуйте.
При нажатии и удержании одной из кнопок со стрелками элемента управления NumericUpDown скорость смены значений в окне увеличивается. То же происходит и при работе с клавиатурой: если нажать и держать клавишу нажатой, то через какое-то время частота "нажатий" возрастает. Пусть есть кнопка на форме, при клике на которой происходит какое-то отображаемое на форме событие. Пользователь нажал кнопку мышкой и не отпускает. Событие должно повторятся сначала раз в секунду, а если он её не отпустит ещё пару секунд, то частота повторения событий должна увеличится втрое. На VB-6 это выглядело так:
0
|
||||||
| 25.10.2016, 06:57 | |
|
Ответы с готовыми решениями:
30
Как обнаружить факт нажатия кнопки на гарнитуре Earpods?
Как реализовать выполнение работы на нажатие кнопки Enter |
|
Заблокирован
|
|
| 25.10.2016, 11:55 | |
|
1
|
|
|
179 / 69 / 13
Регистрация: 22.12.2015
Сообщений: 2,648
|
|||||||||||
| 25.10.2016, 17:04 [ТС] | |||||||||||
|
Shersh, ну в этом нового немного.
Как в NET организовать задержку в n мсек?
Кнопка залипает:
0
|
|||||||||||
|
1085 / 915 / 213
Регистрация: 29.09.2015
Сообщений: 1,019
|
|||||||||||
| 25.10.2016, 20:13 | |||||||||||
Сообщение было отмечено jkrnd как решение
Решение
Использовать потоки
Добавлено через 37 минут По поводу первого поста, о том что нужно частоту менять при удержании
2
|
|||||||||||
|
179 / 69 / 13
Регистрация: 22.12.2015
Сообщений: 2,648
|
|||
| 25.10.2016, 20:30 [ТС] | |||
|
Sklifosofsky, Всё работает. Спасибо. Неужели без заморочек с потоками никак не обойтись? На VB-6 всё работало и без них. Немного непонятно как попробовать то, что закомментировано (Delegate Sub...). Если не трудно подскажите как реализовать следующее: через 2 сек после нажатия и удержания кнопки увеличить скорость повторов (уменьшить значение аргумента функции Sleep в 2 раза). А если кнопка не одна?
Не по теме: С потоками работать опасно. Я недавно при работе с Com-портом вместо цикла таймера попытался использовать потоки, вроде всё то же самое (почти) и визуально ошибок нет. Но в приборе, передающем данные опять что-то глюкнуло, пошли нештатки и меня отлучили от церкви:( Добавлено через 2 минуты Sklifosofsky, пока писал вопрос получил ответ, спасибо ![]() Добавлено через 8 минут Добавлено через 1 минуту
0
|
|||
|
1085 / 915 / 213
Регистрация: 29.09.2015
Сообщений: 1,019
|
|||||||
| 25.10.2016, 20:54 | |||||||
Сообщение было отмечено jkrnd как решение
РешениеЭто пример с объявленным делегатом, причем упрощённый. По логике лучше объявление делать до работы функции (я просто чешусь, когда знаю, что при цикличной работе создается и тут же удаляется локальная переменная).
И еще про потоки. Thread.Sleep - это не отсечка, а метод останавливающий поток на определенное время. Причем останавливается не только действие метода в котором он находится, но и все процессы потока, в том числе анимация формы... По этому лучше такие костыли вытворять в дочернем потоке, который не трогает основной. Единственное исключение, это когда надо вызвать метод и передать переменные в основное поток с формой, использовать Control.Invoke([делегат], [переменные]) Не по теме: А про опасность потоков... Ну не знаю. Главное правильно подойти к этому вопросу=) И как сказал Альф: "Вы не любите кошек? Да вы просто не умеете их готовить! "
1
|
|||||||
|
179 / 69 / 13
Регистрация: 22.12.2015
Сообщений: 2,648
|
|||||||
| 25.10.2016, 21:01 [ТС] | |||||||
0
|
|||||||
|
1085 / 915 / 213
Регистрация: 29.09.2015
Сообщений: 1,019
|
|
| 25.10.2016, 21:09 | |
Сообщение было отмечено jkrnd как решение
Решение
Можно. Они в одном потоке
1
|
|
|
179 / 69 / 13
Регистрация: 22.12.2015
Сообщений: 2,648
|
||||||
| 25.10.2016, 21:23 [ТС] | ||||||
|
Sklifosofsky, Остановился на следующем варианте с двумя кнопками (Increment и Decrement):
0
|
||||||
|
Модератор
4357 / 3427 / 512
Регистрация: 27.01.2014
Сообщений: 6,258
|
|
| 27.10.2016, 02:17 | |
|
а если вместо потоков использовать таймер, созданный динамически или в дизайнере, не важно... И регулироыка скорости будет как раз его свойство Interval...? И код будет проще, пусть не столь профессионален... Но все же как вариант
1
|
|
|
179 / 69 / 13
Регистрация: 22.12.2015
Сообщений: 2,648
|
||||||
| 27.10.2016, 09:23 [ТС] | ||||||
|
Yury Komar, Наверное это должно выглядеть так:
0
|
||||||
|
307 / 248 / 40
Регистрация: 28.09.2013
Сообщений: 600
|
|
| 29.10.2016, 18:23 | |
|
jkrnd, поставьте временнЫе отсечки до и после операции, и сравните полученные TimeSpan
1
|
|
|
Модератор
4357 / 3427 / 512
Регистрация: 27.01.2014
Сообщений: 6,258
|
|
| 07.11.2016, 20:40 | |
|
думаю быстрее будет конечно поток, но веди таймер сделан на основе отдельгого потока вроде, если не ошибаюсь?
1
|
|
|
179 / 69 / 13
Регистрация: 22.12.2015
Сообщений: 2,648
|
|||||||
| 18.11.2016, 18:34 [ТС] | |||||||
|
Добрый вечер.
![]() если можно, прокомментируйте код
0
|
|||||||
|
1085 / 915 / 213
Регистрация: 29.09.2015
Сообщений: 1,019
|
|||||||||||
| 18.11.2016, 19:15 | |||||||||||
|
Старт асинхронного потока начинается вот с этой строки
Поток завершается автоматически, после завершения работы метода thExec. Схема работы: Вызов метода нажатия кнопки; Создается экземпляр класса делегата; Вызов асинхронный поток .BeginInvoke; Параллельно начинает работу метод thExec; Завершается метод нажатия кнопки (Не зависимо работает thExec или нет, он уже в другом потоке); Основной поток (где форма, компоненты и т.д) работает как ни в чем не бывало; В thExec есть метод (вклинивания) передачи данных в основной поток Control.Invoke. (Образно, как будто посторонний человек нажал вашу кнопку); После завершения цикла, метод прекращает свою работу без вызова других методов и асинхронный поток завершает свою работу.
2
|
|||||||||||
|
179 / 69 / 13
Регистрация: 22.12.2015
Сообщений: 2,648
|
|
| 18.11.2016, 20:17 [ТС] | |
|
Sklifosofsky, Спасибо. Уже проясняется что-то. Если Sleep сделать чуть подольше и закрыть окно программы до завершения цикла во втором потоке, то получаем ошибку:
"Доступ к ликвидированному объекту невозможен." Как это исключить в приведенном выше коде? А можно Me.Invoke(CallBack, i) вызвать без второго параметра (Me.Invoke(CallBack)) организовав в ShowResult статическую переменную со сбросом?
0
|
|
|
1085 / 915 / 213
Регистрация: 29.09.2015
Сообщений: 1,019
|
||||||||
| 18.11.2016, 20:34 | ||||||||
1
|
||||||||
|
179 / 69 / 13
Регистрация: 22.12.2015
Сообщений: 2,648
|
|
| 18.11.2016, 20:44 [ТС] | |
|
Sklifosofsky, Спасибо!
0
|
|
|
1085 / 915 / 213
Регистрация: 29.09.2015
Сообщений: 1,019
|
|
| 18.11.2016, 20:48 | |
|
Уточню по поводу ошибки при статической переменной. Насчет примитивов не знаю, не попадал, но было дело при работе с экземплярами классов
1
|
|
|
179 / 69 / 13
Регистрация: 22.12.2015
Сообщений: 2,648
|
||||||
| 18.11.2016, 20:57 [ТС] | ||||||
|
Sklifosofsky, а вот эти две строки как прокомментировать:
0
|
||||||
| 18.11.2016, 20:57 | |
|
Помогаю со студенческими работами здесь
20
Разрешение нажатия кнопки
Эмуляция нажатия кнопки в WebBrowser Изменение обработчика нажатия кнопки, как реализовать? Как реализовать изменения внутри окна после нажатия некой кнопки? Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога
Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
|
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
|
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога
В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
|
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога
Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
|
|
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога
Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
|
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога
Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
|
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования.
Часть библиотеки BedvitCOM
Использованы. . .
|
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога
SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
|