Форум программистов, компьютерный форум, киберфорум
C# Windows Forms
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.94/16: Рейтинг темы: голосов - 16, средняя оценка - 4.94
1 / 1 / 1
Регистрация: 29.08.2013
Сообщений: 30

Горячие клавиши

30.08.2013, 00:44. Показов 3341. Ответов 7
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Есть форма. На ней 2 панели. Одна для браузера, другая под кнопки.

Если сделать так:
C#
1
2
3
4
5
6
7
private void Form1_KeyDown(object sender, KeyEventArgs e)
        {
            if (e.KeyCode == Keys.F11)
            {
                MessageBox.Show("Работает");
            }
        }
... Тогда клавиша сработает ТОЛЬКО когда одна из кнопок будет в фокусе и никак иначе.

Поэтому я сделал так:
C#
1
2
3
4
5
6
7
private void Browser_PreviewKeyDown(object sender, PreviewKeyDownEventArgs e)
        {
             if (e.KeyCode == Keys.F11)
            {
                MessageBox.Show("Работает");
            }
        }
Но это через одно место. Приходится постоянно передавать фокус браузеру при нажатии кнопки. А с контекстным меню вообще получается непонятно что.

В общем... что посоветуете?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
30.08.2013, 00:44
Ответы с готовыми решениями:

Как присваивать горячие клавиши к примеру на выполнение нажатие клавиши
Народ. не могу найти, как в студии присваивать горячие клавиши к примеру на выполнение нажатие клавиши? или на пункты меню.. Добавлено...

Горячие клавиши
Как использовать горячие клавиши? К примеру я нажал на shift и выполнилось действие f1.enable = false; А вот если нажал на alt то ...

Горячие клавиши
Добрый день. Появилась необходимость добавить в приложение горячие клавиши, но не простые, а примерно как это сделано в Word/Excel. Это...

7
Нарушил, 10 блоков,акка
 Аватар для Итори
72 / 72 / 11
Регистрация: 19.07.2013
Сообщений: 250
30.08.2013, 04:20
... Тогда клавиша сработает ТОЛЬКО когда одна из кнопок будет в фокусе и никак иначе.
Поставить у формы свойство keyPrewiew в true.
0
1 / 1 / 1
Регистрация: 29.08.2013
Сообщений: 30
30.08.2013, 04:21  [ТС]
Стоит. И убирал. Ничего не меняется.
0
)))
 Аватар для aleks_pilipenko
610 / 423 / 55
Регистрация: 31.12.2009
Сообщений: 2,334
Записей в блоге: 3
30.08.2013, 04:21
Вообще, чтобы нажатие кнопки срабатывало всегда нужно в дизайнере формы сделать свойство KeyPreview в true...
сделал ещё так:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
        private void Form1_KeyDown(object sender, KeyEventArgs e)
        {
            if (e.KeyCode == Keys.F11)
            {
                MessageBox.Show("Работает");
            }
        }
 
        private void webBrowser1_PreviewKeyDown(object sender, PreviewKeyDownEventArgs e)
        {
            if (e.KeyCode == Keys.F11)
            {
                MessageBox.Show("Работает");
            }
        }
теперь работает..
0
1 / 1 / 1
Регистрация: 29.08.2013
Сообщений: 30
30.08.2013, 04:48  [ТС]
aleks_pilipenko, я так с самого начала сделал. Но дело в том, что после нажатия на такую кнопку

C#
1
2
3
4
5
6
7
8
9
10
11
12
private void button2_Click(object sender, EventArgs e)
        {
            if (this.WindowState == FormWindowState.Normal)
            {
                this.FormBorderStyle = FormBorderStyle.None;
                this.WindowState = FormWindowState.Maximized;
            }
            else
            {
                this.FormBorderStyle = FormBorderStyle.Sizable;
                this.WindowState = FormWindowState.Normal;
            }
Сработает и Form1_KeyDown и webBrowser1_PreviewKeyDown

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

Code
1
webBrowser1.Focus();
0
)))
 Аватар для aleks_pilipenko
610 / 423 / 55
Регистрация: 31.12.2009
Сообщений: 2,334
Записей в блоге: 3
30.08.2013, 05:08
ХЗ, добавил кнопку с кодом, все работает:
Вложения
Тип файла: zip WindowsFormsApplication7.zip (37.9 Кб, 10 просмотров)
0
1 / 1 / 1
Регистрация: 29.08.2013
Сообщений: 30
30.08.2013, 11:57  [ТС]
Тьфу... this.KeyPreview = true нужно в Form1.Designer.cs.... а я помещал возле InitializeComponent(); (видел где-то в примере)

Тогда необходимость в использовании webBrowser1_PreviewKeyDown отпадает, НО! "Баг" двойного срабатывания остается. Порядок действий:
1. Запустить программу
2. Развернуть форму
3. Кликнуть по браузеру
4. Нажать F11
Появится первое окно с сообщением, нажать ок - появится второе.

Добавлено через 6 часов 25 минут

Что ж... скачал ddl'ку эту http://easylab.net.ua/net-c-wi... ih-klavish
Но там хоткей работает даже при свернутом окне. А событие формы Activated что-то глючило или у меня руки из ж... и я не смог сделать, чтобы работало только на форме.

Еще порылся в гугле и наткнулся на это:

C#
1
2
3
4
5
6
7
protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
        {
            if (keyData == (Keys.Control | Keys.S))
                MessageBox.Show("ctr+s");
 
            return base.ProcessCmdKey(ref msg, keyData);
        }
Работает как надо!
0
)))
 Аватар для aleks_pilipenko
610 / 423 / 55
Регистрация: 31.12.2009
Сообщений: 2,334
Записей в блоге: 3
30.08.2013, 15:49
оч. давно писал игру - танчики-Battle-Sity, тоже была похожая проблема с клавой... Я тогда по кривому сделал, разместил невидимый textbox и все стало хорошо работать...
Т.к. все остальное просто рисовал... По-моему я ещё фокус на этот текстбокс наводил постоянно, сейчас, к сожалению не помню...
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
30.08.2013, 15:49
Помогаю со студенческими работами здесь

Горячие клавиши на кнопки
Я так понял, что просто так не получится назначить?? Можно в событии KeyPress. Но там сама форма все перехватывает.. И нужно...

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

Не работают горячие клавиши в textbox
e.KeyChar = char.ToUpper(e.KeyChar); if (alph.IndexOf(e.KeyChar) >= 0) // символы алфавита return; ...

Горячие клавиши в приложении не работают
Здравствуйте. Пишу менюшку для программы, но не получается забить на хоткеи действия. ЧЯДНТ? private void MainForm_KeyDown(object sender,...

Горячие клавиши и multiline в textBox
Привет. У меня есть textBox, и в нем я хочу прописать некое событие, которое бы происходило по нажатию пользователем сочетания клавиш Ctrl...


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
Unity 4D
GameUnited 13.06.2025
Четырехмерное пространство. . . Звучит как что-то из научной фантастики, правда? Однако для меня, как разработчика со стажем в игровой индустрии, четвертое измерение давно перестало быть абстракцией из. . .
SSE (Server-Sent Events) в ASP.NET Core и .NET 10
UnmanagedCoder 13.06.2025
Кажется, Microsoft снова подкинула нам интересную фичу в новой версии фреймворка. Работая с превью . NET 10, я наткнулся на нативную поддержку Server-Sent Events (SSE) в ASP. NET Core Minimal APIs. Эта. . .
С днём независимости России!
Hrethgir 13.06.2025
Решил побеседовать, с утра праздничного дня, с LM о завоеваниях. То что она написала о народе, представителем которого я являюсь сам сначала возмутило меня, но дальше только смешило. Это чисто. . .
Лето вокруг.
kumehtar 13.06.2025
Лето вокруг. Наполненное бурями и ураганами событий. На фоне магии Жизни, священной и вечной, неумелой рукой человека рисуется панорама душевного непокоя. Странные серые краски проникают и. . .
Популярные LM модели ориентированы на увеличение затрат ресурсов пользователями сгенерированного кода (грязь -заслуги чистоплюев).
Hrethgir 12.06.2025
Вообще обратил внимание, что они генерируют код (впрочем так-же ориентированы разработчики чипов даже), чтобы пользователь их использующий уходил в тот или иной убыток. Это достаточно опытные модели,. . .
Топ10 библиотек C для квантовых вычислений
bytestream 12.06.2025
Квантовые вычисления - это та область, где теория встречается с практикой на границе наших знаний о физике. Пока большая часть шума вокруг квантовых компьютеров крутится вокруг языков высокого уровня. . .
Dispose и Finalize в C#
stackOverflow 12.06.2025
Работая с C# больше десяти лет, я снова и снова наблюдаю одну и ту же историю: разработчики наивно полагаются на сборщик мусора, как на волшебную палочку, которая решит все проблемы с памятью. Да,. . .
Повышаем производительность игры на Unity 6 с GPU Resident Drawer
GameUnited 11.06.2025
Недавно копался в новых фичах Unity 6 и наткнулся на GPU Resident Drawer - штуку, которая заставила меня присвистнуть от удивления. По сути, это внутренний механизм рендеринга, который автоматически. . .
Множества в Python
py-thonny 11.06.2025
В Python существует множество структур данных, но иногда я сталкиваюсь с задачами, где ни списки, ни словари не дают оптимального решения. Часто это происходит, когда мне нужно быстро проверять. . .
Работа с ccache/sccache в рамках C++
Loafer 11.06.2025
Утилиты ccache и sccache занимаются тем, что кешируют промежуточные результаты компиляции, таким образом ускоряя последующие компиляции проекта. Это означает, что если проект будет компилироваться. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru
OSZAR »