Форум программистов, компьютерный форум, киберфорум
C# .NET
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.63/8: Рейтинг темы: голосов - 8, средняя оценка - 4.63
 Аватар для Mikant
1322 / 995 / 127
Регистрация: 08.12.2009
Сообщений: 1,299

Трансляция горячих клавиш

09.05.2010, 15:08. Показов 1614. Ответов 1
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
День добрый. Помогите, люди добрые, советом, как по уму транслировать события MenuStrip в WinForms приложениях. Вот тут набросал примерчик:

у Form1 есть меню с одной кнопкой. за кнопкой привязано сочетание клавиш Ctrl+Space. при загрузке Form1 просто появляется новый экземпляр Form2. у него Owner выставляется = Form1. вопрос как при нажатии Ctrl+Space у Form2 вызвать обработчик в Form1

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
using System;
using System.Windows.Forms;
 
namespace WindowsFormsApplication {
    static class Program {
        [STAThread]
        static void Main() {
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            Application.Run(new Form1());
        }
    }
 
    public class Form1 : Form {
        public Form1() {
            MenuStrip menu = new MenuStrip();
            ToolStripMenuItem toolButton = new ToolStripMenuItem() {
                ShortcutKeys = Keys.Control | Keys.Space,
                Text = "Нажми меня"
            };
            toolButton.Click += new EventHandler(toolButton_Click);
 
            menu.Items.Add(toolButton);
            this.Controls.Add(menu);
            this.MainMenuStrip = menu;
 
        }
 
        protected override void OnLoad(EventArgs e) {
            new Form2().Show(this);
            base.OnLoad(e);
        }
 
        private void toolButton_Click(object sender, EventArgs e) {
            MessageBox.Show(string.Empty);
        }
    }
 
    public class Form2 : Form { }
}
1. KeyPreview, ProcessCmdKey не предлагать
2. на Form2 не должно быть явных вызовов
3. SendMessage не подойдет
4. если у Form2 выставить Parent = Form1, то делегация, естественно будет работать, но
4.1 я не знаю как в MDI делать правильные floating-формы, тем более немодальные TopLevel
4.2 на Form2 не должно появиться MenuStrip'a для соединений
5. трансляция должна работать только для неотловленных событий ввода

хозяйке на заметку: у Form в .NET переопределен метод ProcessCmdKey и в нем одной из первых строк идет пробежка по всем элементам MainMenuStrip и в случае совпадения жеста с ShortcutKeys у элемента меню просто делается PerformClick();
естественно, у ProcessCmdKey модификаторы доступа protected internal , а в Пабликов Морозовых играть не хочу.

надеюсь на вашу помощь

Не по теме:

ух ты какие кнопочки на нашем форуме красивые стали

0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
09.05.2010, 15:08
Ответы с готовыми решениями:

Регистрация горячих клавиш
Здравствуйте у меня такой вопрос как сделать горячие клавиши на подобие этого procedure HotKey(var Key: TWMHotKey); message...

блокировка горячих клавиш
Добрый вечер уважаемые Помогите пожалуйста составить код который бы блокировал клавишу Win и все горячие клавиши кроме Shift+Ctrl и...

Не срабатывает SendKeys при повторном нажатии горячих клавиш
Здравствуйте, не срабатывает SendKeys при повторном нажатии горячих клавиш. Я понимаю, что дело в скорости обработки сообщений WinAPI,...

1
13 / 10 / 2
Регистрация: 30.07.2009
Сообщений: 42
11.05.2010, 21:31
Может попробывать старый добрый winapi RegisterHotKey ?
Я только этому методу импонирую.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
11.05.2010, 21:31
Помогаю со студенческими работами здесь

Изменение горячих клавиш
Добрый вечер! Есть список горячих клавиш, по нажатию которых происходят различные действия. Хотелось бы, чтобы была возможность ...

Создание горячих клавиш
Всем привет вот уже второй час искал инфу нашел мало чего хорошего в основном что то вроде этого находил InitializeComponent(); ...

Переопределение горячих клавиш
У меня есть технический вопрос по Visual Studio У неё есть горячие клавиши, например Alt+стрелочка вверх - меняет местами текущую строку...

Обработка горячих клавиш
Нарисовал форму. Добавил меню. К командам меню «добавил горячие клавиши» А теперь все компоненты, которые размещены на форме...

Отлов горячих клавиш
Нужно что-бы при нажатии на Enter функция возвращала true Пробовал Private Declare Function GetAsyncKeyState Lib "user32"...


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

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Новые блоги и статьи
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(), которая. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru