Форум программистов, компьютерный форум, киберфорум
C# Windows Forms
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.78/9: Рейтинг темы: голосов - 9, средняя оценка - 4.78
8 / 7 / 3
Регистрация: 24.12.2019
Сообщений: 142

Управление при нажатии клавиш

07.10.2020, 15:39. Показов 1845. Ответов 10
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем привет. Я делаю упражнение на форме при помощи клавиш "W" "S" "A" "D" я изменяю позицию:
C#
1
2
3
4
if(e.KeyCode == Keys.W){y--;}
if(e.KeyCode == Keys.S){y++;}
if(e.KeyCode == Keys.A){x--;}
if(e.KeyCode == Keys.D){y++}
Так всё нормально, но я хочу что бы при нажатие и удержания допустим S и D он выполнял команду x++ и y++, а так он только отходит в бок по y или x. Помогите пожалуйста. На форме использую события KeyDown.
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
07.10.2020, 15:39
Ответы с готовыми решениями:

При нажатии горячих клавиш показать форму
Как организовать чтобы при нажатии Ctrl+V форма выскочила из треи поверх всех окон или хотя бы просто встала поверх всех окон? Пишу так: ...

Включение/выключение события при нажатии клавиш
Мне по заданию нужно, чтобы при движении курсора по форме менялся ее цвет. При этом чтобы этот режим включался/выключался по нажатию...

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

10
76 / 54 / 22
Регистрация: 26.02.2017
Сообщений: 206
07.10.2020, 22:13
Лучший ответ Сообщение было отмечено иван2020 как решение

Решение

Цитата Сообщение от иван2020 Посмотреть сообщение
что бы при нажатие и удержания допустим S и D он выполнял команду x++ и y++
Вот так можно сделать:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
using System;
using System.Drawing;
using System.Windows.Forms;
 
namespace WindowsFormsTestApp1
{
    public partial class Form1 : Form
    {
        int x, y;
 
        KeysPressed keys;
 
        public Form1()
        {
            InitializeComponent();
 
            x = Width / 2;
            y = Height / 2;
        }
 
        private void Form1_KeyDown(object sender, KeyEventArgs e)
        {
            if (e.KeyCode == Keys.W) keys |= KeysPressed.W;
            if (e.KeyCode == Keys.S) keys |= KeysPressed.S;
            if (e.KeyCode == Keys.A) keys |= KeysPressed.A;
            if (e.KeyCode == Keys.D) keys |= KeysPressed.D;
            Invalidate();
 
        }
 
        private void Form1_KeyUp(object sender, KeyEventArgs e)
        {
            if (e.KeyCode == Keys.W) keys ^= KeysPressed.W;
            if (e.KeyCode == Keys.S) keys ^= KeysPressed.S;
            if (e.KeyCode == Keys.A) keys ^= KeysPressed.A;
            if (e.KeyCode == Keys.D) keys ^= KeysPressed.D;
            Invalidate();
        }
 
        protected override void OnPaint(PaintEventArgs e)
        {
            if (keys.HasFlag(KeysPressed.W)) y--;
            if (keys.HasFlag(KeysPressed.S)) y++;
            if (keys.HasFlag(KeysPressed.A)) x--;
            if (keys.HasFlag(KeysPressed.D)) x++;
            e.Graphics.FillRectangle(Brushes.Blue, new Rectangle(x - 3, y - 3, 6, 6));
        }
    }
 
    [Flags]
    enum KeysPressed
    {
        Nothing = 0,
        W = 1,
        S = 2,
        A = 4,
        D = 8
    }
}
1
8 / 7 / 3
Регистрация: 24.12.2019
Сообщений: 142
08.10.2020, 16:48  [ТС]
Спасибо большое за код "хотя я почти не понимаю как она работает", а теперь самое интересное. Если я использую вместо e.Graphics.FillRectangle....
Picturebox1.Top=y-3;
Picturebox1.Left=x-3;

То он вначале он работает нормально, а потом включает турбо и бежит.
Что надо сделать

P. S. Я хз как здесь код записывать в специальную рамку.
0
Добрый пёс
 Аватар для Blasphemie
120 / 86 / 37
Регистрация: 13.09.2020
Сообщений: 254
08.10.2020, 17:14
Цитата Сообщение от иван2020 Посмотреть сообщение
То он вначале он работает нормально, а потом включает турбо и бежит.
Это системные настройки клавиатуры. Без подключения USER32.Dll с ними не справиться.
Вот тут можно почитать.

Добавлено через 16 минут
Code
1
2
3
[CSHARP]
Здесь код.
[/CSHARP]
Вот так записывать в рамку.
1
8 / 7 / 3
Регистрация: 24.12.2019
Сообщений: 142
08.10.2020, 17:45  [ТС]
Ну ладно. Вот код, предполагаю что это и есть подключение:

C#
1
2
 
[DllImport("user32.bll")]
Но он мне пишет ошибку. Куда его вставить. Я вставил как в примере перед "private void Form1_KeyUp(...)"

Добавлено через 1 минуту
Ну ладно. Вот код, предполагаю что это и есть подключение:
C#
1
2
 
[DllImport("user32.bll")]
Но он мне пишет ошибку. Куда его вставить. Я вставил как в примере перед "private void Form1_KeyUp(...)"

Добавлено через 13 секунд
Ну ладно. Вот код, предполагаю что это и есть подключение:
C#
1
2
 
[DllImport("user32.bll")]
Но он мне пишет ошибку. Куда его вставить. Я вставил как в примере перед "private void Form1_KeyUp(...)"

Добавлено через 22 секунды
Ну ладно. Вот код, предполагаю что это и есть подключение:
C#
1
2
 
[DllImport("user32.bll")]
Но он мне пишет ошибку. Куда его вставить. Я вставил как в примере перед "private void Form1_KeyUp(...)"
0
Добрый пёс
 Аватар для Blasphemie
120 / 86 / 37
Регистрация: 13.09.2020
Сообщений: 254
08.10.2020, 17:49
иван2020, я советую просто смириться. С подключаемыми библиотеками мороки много, а пользы в данном случае будет мало, да и испортить общие настройки системы запросто. Лично я, не претендуя на истину, не уверен, что можно изменить настройки клавиатуры для одного конкретного приложения.

По подключению библиотек читать для начала здесь.
1
8 / 7 / 3
Регистрация: 24.12.2019
Сообщений: 142
08.10.2020, 17:51  [ТС]
Эх ладно. Что нибудь придумаю. Всем спасибо за помощь.
0
8 / 7 / 3
Регистрация: 24.12.2019
Сообщений: 142
09.10.2020, 16:13  [ТС]
а можете объяснить мне этот часть кода:
C#
1
2
x = Width / 2;
 y = Height / 2;
и этот для чего надо:
C#
1
2
3
4
5
6
7
8
9
[Flags]
    enum KeysPressed
    {
        Nothing = 0,
        W = 1,
        S = 2,
        A = 4,
        D = 8
    }
0
Добрый пёс
 Аватар для Blasphemie
120 / 86 / 37
Регистрация: 13.09.2020
Сообщений: 254
09.10.2020, 18:29
По второму вопросу вот METAINT и вот MSDocs

По первому - х и у получают координаты центра формы.
1
76 / 54 / 22
Регистрация: 26.02.2017
Сообщений: 206
10.10.2020, 00:55
Цитата Сообщение от иван2020 Посмотреть сообщение
и этот для чего надо
C#
1
[Flags]
Если вкратце, то флаги позволяют хранить в одной переменной несколько фиксированных значений одновременно, что бывает очень удобно и полезно. Так, например, в коде выше сколько бы кнопок Вы одновременно ни нажали 1, 2, 3 или 4 все они сохранятся в переменной keys. Если интересно как это работает, то проходите по ссылкам, оставленным Blasphemie и читайте.
0
76 / 54 / 22
Регистрация: 26.02.2017
Сообщений: 206
10.10.2020, 00:56
Удален повтор
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
10.10.2020, 00:56
Помогаю со студенческими работами здесь

как считывать кириллические буквы при нажатии клавиш?
я считываю нажатие клавиши таким образом: this.KeyDown += new System.Windows.Forms.KeyEventHandler(this.Form1_KeyDown); ... ...

Срабатывание кнопок button при нажатии определённых клавиш
Написал калькулятор, но без ввода с нампада. Нужно его добавить. пробовал так: private void Form1_KeyPress(object sender,...

Включение/отключение смены цвета формы при нажатии клавиш
Форма меняет цвет таким образом private void Form1_MouseMove(object sender, MouseEventArgs e) { double x =...

Поместить форму поверх всех окон при нажатии клавиш
Добрый день уважаемые! У меня не получается сделать чтобы форма моей проги при нажатии комбинаций клавиш стала поверх всех окон! Пишу так ...

Приложение, которое при нажатии на клавиатуре клавиш ‘1’, ‘2’, ‘3’ или ‘4’ открывает окна
Напишите приложение, которое при нажатии на клавиатуре клавиш ‘1’, ‘2’, ‘3’ или ‘4’ открывает соответственно 1, 2, 3 или 4 новых окна.


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Новые блоги и статьи
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-rectangles-sdl3-c. zip finish-rectangles-sdl3-cpp. zip
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru