• Добро пожаловать на Форум пользователей ПО АСКОН. Пожалуйста, авторизуйтесь.
 

Уважаемые пользователи,

Хотим проинформировать вас о режиме работы регистрации на нашем сайте.

Регистрация будет доступна с 8:00 (мск) 12 января.

Благодарим вас за понимание и сотрудничество. Мы ценим ваше терпение и стремимся предоставить вам лучший опыт использования нашего сервиса.

С уважением,
Команда Ascon

Обработка клавиши Del в форме

Автор freestyler, 28.07.26, 12:06:30

« назад - далее »

0 Пользователи и 1 гость просматривают эту тему.

freestyler

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


//Вызов формы
 new FormTest();

//Код формы
 public partial class FormTest : Form
 {
     public FormTest()
     {
         InitializeComponent();
         this.KeyPreview = true; // Включаем обработку клавиш на уровне формы                         
         this.KeyDown += FormTest_KeyDown; // Подписываемся на событие KeyDown

         Show();
     }

     private void FormTest_KeyDown(object sender, KeyEventArgs e)
     {
         MessageBox.Show($"Нажата клавиша {e.KeyCode}");
     }
 }

FormTest_KeyDown нормально отрабатывает все клавиши кроме Del.
FormTest_KeyDown нормально отрабатывает клавишу Del если форма модальная (отображена через ShowDialog();)
FormTest_KeyDown нормально отрабатывает клавишу Del если в Компасе нет открытых документов.

Student2025

Экстрасенсы в отпуске..
Не хотите выкладывать код, winapi вам в помощь.

p3452

Цитата: freestyler от 28.07.26, 12:06:30Написал плагин с формой. Но при нажатии в форме клавиши Del, если в Компасе в это время есть открытый документ и форма не модальная, то она сворачивается. Кто-нибудь с этим сталкивался? Как с этим бороться?

Самый простой вариант - сделать форму модальной.
Второй вариант - связан с написанием CallBack функции - самому управлять главным потоком (приостанавить Компас и передать управление Приложению, а затем обратно).
+ Благодарностей: 1

freestyler

Цитата: Student2025 от 28.07.26, 18:15:15Экстрасенсы в отпуске..
Не хотите выкладывать код, winapi вам в помощь.
Чтобы прочитать мой пост и увидеть, что код там есть, тоже экстрасенсом надо быть? Или просто глаза раскрыть? Нечего сказать - лучше пройти мимо

freestyler

Цитата: p3452 от 28.07.26, 19:36:05Самый простой вариант - сделать форму модальной.
Второй вариант - связан с написанием CallBack функции - самому управлять главным потоком (приостанавить Компас и передать управление Приложению, а затем обратно).
Модальной сейчас ее и сделал, но это в контексте решаемой задачи не очень удобно. Думал, может гуру посоветуют какой-то финт, применительно именно к Компасу. А так да, придется CallBack писать...  Спасибо! :-)

Student2025

Цитата: freestyler от 29.07.26, 08:38:44что код там есть

покажите в первом своем посту реализацию FormTest_KeyDown !
Что не нашли? тогда не жужжите!

Не кто не будет за вас писать код что бы воспроизвести ВАШУ ошибку.

Student2025

#6
Show() - означает что вы сажаете форму на поток Компаса 3Д поэтому идут "глюки".
p3452 вам привел внутренние механизмы взаимодействия с Компасом (более предпочтительней), я же пытаюсь предложить вам наружные механизмы взаимодействия с программой.

Student2025

О предпочтительности - я бы больше написал так - "палка о двух концах".

Если у вас сложные вычислительные процессы то Компас вам не предоставит полное взаимодействие с системой и вы упретесь в однопоток. И будут задействованы ну может 2 ядра процессора.

А внешний способ поможет "выйти" из этого потока, и самим управлять "валом отбора мощности" системы, например средствами winapi.