NotAComputerScienceStudent Ответов: 3

Как остановить автоматический выбор кнопок в C#


В основном у меня есть код для обнаружения пользовательских вводов алфавитов и цифр
private void KeyPressForm1(object sender, KeyPressEventArgs e)
{
    Settings.Keypressed = e.KeyChar;
    label5.Text = "" + Settings.Keypressed;
}

private void KeyUpForm1(object sender, KeyEventArgs e)
{
    label5.Text = "";
}

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

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

В основном я пытался удалить кнопку все вместе но мне нравится использовать внешний вид кнопки

BillWoodruff

"Кнопка автоматически выбирается", когда что ?

Вам нужно четко определить условия, при которых вы хотите обнаружить нажатие клавиши: все время, для любого контроля ? только для одного или нескольких элементов управления ?

NotAComputerScienceStudent

https://youtu.be/AtE7xRmQAjc
Визуальное представление

BillWoodruff

Я не могу понять видео. Попытайся ответить на вопросы, которые я тебе задал.

Когда именно вы хотите получить события нажатия клавиш ?

NotAComputerScienceStudent

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

BillWoodruff

Посмотрите, работает ли решение, которое я только что опубликовал, для вас.

NotAComputerScienceStudent

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

3 Ответов

Рейтинг:
21

NotAComputerScienceStudent

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


Maciej Los

Если вы решили свою проблему, пожалуйста, отметьте свой ответ как решение. Это изменит статус вашего вопроса на "решен".

Рейтинг:
2

BillWoodruff

Я бы поспорил, что отключение выбора элемента управления здесь не является реальной проблемой.

Maciej Los

- Посмотрим...

Рейтинг:
2

BillWoodruff

Установите для свойства FormKeyPreview значение false. Попробуйте это сделать в форме:

protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
{
    // only to demonstrate you are getting all the characters
    // no matter what Control has the focus
    Console.WriteLine($"active control: {ActiveControl.Name} | key: {keyData}");
            

    // handle the characters here

    return base.ProcessCmdKey(ref msg, keyData);
}
Цитата:
Метод ProcessCmdKey сначала определяет, имеет ли элемент управления ContextMenu, и если да, то позволяет ContextMenu обрабатывать командный ключ. Если командная клавиша не является ярлыком меню и элемент управления имеет родителя, ключ передается родительскому методу ProcessCmdKey. Конечным результатом является то, что командные клавиши "пузырятся" вверх по иерархии управления. В дополнение к клавише, которую нажал пользователь, ключевые данные также указывают, какие клавиши-модификаторы были нажаты одновременно с клавишей. Клавиши-модификаторы включают клавиши SHIFT, CTRL и ALT.
[^]