0 / 0 / 0
Регистрация: 09.01.2012
Сообщений: 32
1

Нужен пример управления приложением с помощью клавиатуры

04.03.2012, 13:35. Показов 5408. Ответов 18
Метки нет (Все метки)

Добрый день!
Я пишу небольшую программу, типо игрушки, там нужно управлять кнопками с клавиатуры.
Подскажите пожалуйста как управлять кнопкой с клавиатуры.
Например, у меня есть button1 и я хочу чтобы при нажатии на кнопку "W" срабатывали события в данной кнопке.
Напишите пример оформления такой вещички, очень прошу.
И вот какой вопрос, сколько всего можно использовать таймеров в программе? > 1?
__________________
Помощь в написании контрольных, курсовых и дипломных работ здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
04.03.2012, 13:35
Ответы с готовыми решениями:

Управление приложением с помощью клавиатуры
У меня есть 4 кнопки: вверх вниз влево вправо я сделал чтобы при нажатие клавиши влево...

Нужен пример программы для управления БД
Здравствуйте! Скиньте пожалуйста хороший пример программы для управления базой данных, в которой...

Нужен пример, решенный с помощью метода трапеций
У кого-нибудь есть любой пример решенный именно с помощью этого метода? Мне чисто глянуть, как...

Распарсить FB2 с помощью XML: нужен пример
Всем форумчанам привет. Такое дело - надо распарсить FB2 с помощью XML. Не до конца понимаю что это...

18
ѪѦѢ
599 / 168 / 5
Регистрация: 19.08.2011
Сообщений: 665
Записей в блоге: 3
04.03.2012, 13:42 2
Таймеров сколько угодно, ну в разумных пределах

Насчёт клавиатуры ищу по винту примерчик
0
711 / 702 / 168
Регистрация: 15.06.2011
Сообщений: 1,704
04.03.2012, 13:45 3
За нажатие клавиш клавиатуры отвечают события KeyPress, KeyDown и KeyUp.

Эмулировать нажатие кнопок своей программе можно методом PerformClick();

C#
1
button1.PerformClick(); //Нажали на button1
Например:

C#
1
2
3
4
5
6
7
8
9
10
private void button1_Click(object sender, EventArgs e)
{
    MessageBox.Show("Нажали!"); //MessageBox при клике кнопки
}
 
private void Form1_KeyDown(object sender, KeyEventArgs e) //Обработчик нажатия клавиши 
{
    if (e.KeyCode == Keys.Enter) //Если нажата клавиша <ENTER>
        button1.PerformClick(); //Эмулируем клик кнопки
}
В результате нажатия <ENTER> на форме - выскочит сообщение "Нажали!".
2
ѪѦѢ
599 / 168 / 5
Регистрация: 19.08.2011
Сообщений: 665
Записей в блоге: 3
04.03.2012, 13:50 4
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
using System;
using System.Windows.forms;
using System.Drawing;
 
public class KeyEvents:form {
 
    public KeyEvents() {
 
        this.KeyDown += new KeyEventHandler(OnKeypress);
    }
 
    public void OnKeypress(object sender, KeyEventArgs KEargs)    {
 
        MessageBox.Show(KEargs.KeyCode.ToString());
 
    }
 
    public static void Main()    {
 
        Application.Run(new KeyEvents());
    }
}
0
0 / 0 / 0
Регистрация: 09.01.2012
Сообщений: 32
04.03.2012, 14:14  [ТС] 5
Сейчас попробую

Добавлено через 11 минут
не работает ((
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
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
 
namespace WindowsFormsApplication1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
        private void button1_Click(object sender, EventArgs e)
        {
            MessageBox.Show("Нажали!"); //MessageBox при клике кнопки
        }
 
        private void Form1_KeyDown(object sender, KeyEventArgs e) //Обработчик нажатия клавиши 
        {
            if (e.KeyCode == Keys.F1) //Если нажата клавиша <ENTER>
                button1.PerformClick(); //Эмулируем клик кнопки
        }
        
    }
}
0
711 / 702 / 168
Регистрация: 15.06.2011
Сообщений: 1,704
04.03.2012, 15:57 6
Странно, если переписать KeyDown на кнопку, то работает!
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
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
 
namespace WindowsFormsApplication1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
        private void button1_Click(object sender, EventArgs e)
        {
            MessageBox.Show("Нажали!"); //MessageBox при клике кнопки
        }
 
        private void button1_KeyDown(object sender, KeyEventArgs e) //Переписываем обработчик на кнопку 
        {
            if (e.KeyCode == Keys.F1) //Если нажата клавиша <F1>
                button1.PerformClick(); //Эмулируем клик кнопки
        }
        
    }
}
1
0 / 0 / 0
Регистрация: 09.01.2012
Сообщений: 32
06.03.2012, 18:00  [ТС] 7
Не работает такой пример! Даже когда мышкой нажимаешь на бутон ничего не происходит!
0
85 / 84 / 13
Регистрация: 21.10.2010
Сообщений: 349
06.03.2012, 19:04 8
Цитата Сообщение от RoboMaster Посмотреть сообщение
Не работает такой пример! Даже когда мышкой нажимаешь на бутон ничего не происходит!
Потому что вы методы не добавили в обработчики, поэтому и не работает.
1
Эксперт С++
2428 / 2035 / 304
Регистрация: 03.05.2011
Сообщений: 4,548
Записей в блоге: 15
06.03.2012, 19:14 9
как-то давно делал управление автомобилем в MDX, приведу код может поможет
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
protected override void OnKeyDown(KeyEventArgs e)
        {
            if (e.KeyCode == Keys.Escape)
            {
                Close();
                return;
            }
            if ((e.KeyCode == Keys.Left) || (e.KeyCode == Keys.NumPad4))
            {
                car.IsMovingLeft = true;
                car.IsMovingRight = false;
            }
            if ((e.KeyCode == Keys.Right) || (e.KeyCode == Keys.NumPad6))
            {
                car.IsMovingLeft = false;
                car.IsMovingRight = true;
            }
            if (e.KeyCode == Keys.NumPad5)
            {
                car.IsMovingLeft = false;
                car.IsMovingRight = false;
            }
        }
в классе для car
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
private bool movingLeft = false;
private bool movingRight = false;
 
public bool IsMovingLeft
        {
            get { return movingLeft; }
            set { movingLeft = value; }
        }
public bool IsMovingRight
        {
            get { return movingRight; }
            set { movingRight = value; }
        }
весь проект в прикреплённых.
Вложения
Тип файла: rar Dodger.rar (135.0 Кб, 47 просмотров)
1
12 / 12 / 4
Регистрация: 30.08.2011
Сообщений: 62
06.03.2012, 21:21 10
Цитата Сообщение от RoboMaster Посмотреть сообщение
Не работает такой пример! Даже когда мышкой нажимаешь на бутон ничего не происходит!
У меня всё работает.
P.S. Может вы после условия забыли {} поставить?
0
445 / 163 / 11
Регистрация: 25.02.2012
Сообщений: 398
Записей в блоге: 2
07.03.2012, 20:30 11
Цитата Сообщение от DimanRu Посмотреть сообщение
Странно, если переписать KeyDown на кнопку, то работает!
Вы, по-моему, не устанавливали KeyPreview на true:
C#
1
this.KeyPreview = true;
1
711 / 702 / 168
Регистрация: 15.06.2011
Сообщений: 1,704
07.03.2012, 20:35 12
Цитата Сообщение от coderxx Посмотреть сообщение
Вы, по-моему, не устанавливали KeyPreview на true:
C#
1
this.KeyPreview = true;
Точно, помогло)
0
0 / 0 / 0
Регистрация: 09.01.2012
Сообщений: 32
08.03.2012, 12:33  [ТС] 13
_lunar_, Я твой код не понимаю.

DimanRu, пришли пожалуйста весь проект, а то понять не могу, я подключил this.KeyPreview = true; в текст, но программа не работает! какая то в ней ошибка
0
711 / 702 / 168
Регистрация: 15.06.2011
Сообщений: 1,704
08.03.2012, 13:40 14
Создайте новый проект, и замените весь текст файла Form1.cs на такой:
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
using System;
using System.Windows.Forms;
 
namespace WindowsFormsApplication1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
            this.KeyPreview = true; //Задать значение true сойству формы KeyPreview можно в конструкторе, или в коде
        }
 
        private void button1_Click(object sender, EventArgs e)
        {
            MessageBox.Show("Нажали button1");
        }
 
        private void Form1_KeyDown(object sender, KeyEventArgs e)
        {
            if (e.KeyCode == Keys.F1)
                button1.PerformClick();
        }
    }
}
1
0 / 0 / 0
Регистрация: 09.01.2012
Сообщений: 32
11.03.2012, 13:39  [ТС] 15
У меня походу компилятор не позволяет работать с клавиатурой!
Сделал всё как ты сказал, не пашет, даже когда нажимаю мышкой на бутон ничего не происходит...

Добавлено через 2 минуты
Слушай, сделай сам проект и скинь мне его пожалуйста, я буду в нем продолжать писать программу(
0
106 / 106 / 9
Регистрация: 19.12.2010
Сообщений: 417
11.03.2012, 14:09 16
Проблема не в компиляторе, проблема в том, что DimanRu случайно забыл упомянуть, что надо ещё подписаться на события button1_Click и Form1_KeyDown. Сейчас сделаю проект, но надо вам научиться подписываться на события.

Проект: ButtonPerformClick.zip
0
106 / 106 / 9
Регистрация: 19.12.2010
Сообщений: 417
11.03.2012, 14:20 17
Запускаете и нажимаете клавишу F1 - появляется сообщение, словно вы нажали кнопку Button1.
Но лучше сделать не так, а просто вынести обработку по нажатию клавиш в отдельный метод, а в button1_Click и Form1_KeyDown лишь вызывать этот метод.
0
0 / 0 / 0
Регистрация: 09.01.2012
Сообщений: 32
12.03.2012, 18:31  [ТС] 18
FutureCome, спасибо большое, но я не могу открыть Ваш проект
0
106 / 106 / 9
Регистрация: 19.12.2010
Сообщений: 417
12.03.2012, 20:21 19
Вероятно, у вас старая студия (у меня 2010). Создайте новый проект, удалите свою форму, и добавьте в него файлы из моего проекта (форму).
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
12.03.2012, 20:21

Использование статус-бара для управления приложением
Доброго времени суток! Необходимо вынести некоторые простые функции управления приложением...

Подключение джойстика для управления сторонним приложением
Здравствуйте. Вопрос в следующем. У меня есть большая программа которая работает с измерительными...

Нужен элемент управления со сворачиваемым списком, похожий на панель элементов управления в VS
Нужен элемент управления со сворачиваемым списком, как панель элементов в VS, желательно с...

Как отключить запоминание раскладки клавиатуры за конкретным приложением?
Баловался в реестре когда был молодым, теперь не могу найти как исправить асё обратно(( кто поможет?


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

Или воспользуйтесь поиском по форуму:
19
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.