Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Проблема с отловом нажатия кнопки.

12K
27 октября 2006 года
sliderX
16 / / 12.08.2006
Есть примерно такой код:

Код:
...
public static void keypressed = 0;

private void button1_Click(object sender, EventArgs e)
        {
            while (keypressed != 1)        
            {
                a = a;
            }
            this.close();
        }

private void Form1_KeyPress(object sender, KeyPressEventArgs e)
        {
            keypressed = 1;
        }
...


Т.е форма должна закрытся как только я нажму кнопку, но после того как прога уходит в условно-бесконечный цикл, она перестает отлавливать нажатие кнопки. Что делать?
1.7K
27 октября 2006 года
ilyes
181 / / 22.02.2006
Можно использовать таймер
Код:
...
public static void keypressed = 0;
private bool flag = false;

private void button1_Click(object sender, EventArgs e)
        {
            flag = true;
        }

private void Form1_KeyPress(object sender, KeyPressEventArgs e)
        {
            keypressed = 1;
        }
private void timer1_Tick(object sender, EventArgs e)
        {
            if (fl && keypressed == 1)
                this.Close();
        }
...
12K
27 октября 2006 года
sliderX
16 / / 12.08.2006
Так дело в том что цикл запускающийся по button1_click обязательно должен выполнятся все время, в нем весь смысл (в реальной проге там ведь не a=a), но пока он выполняется форма не реагирует на KeyPress. Нужно чтобы реагировала с запущеным циклом..
273
30 октября 2006 года
3A3-968M
1.2K / / 22.12.2005
Дело в том, что в твоём цикле отсутствует обработка GUI-сообщений между контролами. Ты стопоришь главный цикл обработки сообщений, запущенный при помощи Application.Run. Для этого в цикле необходимо дать приложению обработать все сообщения, стоящие в очереди.
Ответ прост, вызывай в своём цикле Application.DoEvents().
17K
01 ноября 2006 года
Dionis
23 / / 29.08.2006
ЗАЗ-968М прав и предлагаю еще одно решение
How to: Run an Operation in the Background

Дословно:
Если у вас есть код, который должен выполняться длительное время и вы не хотите, чтобы на это время ваш интерфейс продолжал работать, то используйте BackgroundWorker для запуска этого кода в отдельном потоке.
Код в примере MSDN показывает, как запускается трудоемкая операция на заднем фоне. Форма имеет кнопки Старт и Канцел. Нажатие кнопки Старт запускает эту трудоемкую операцию в отдельном асинхронном потоке. При этом интерфейс приложения продолжает реагировать на события пользователя и нажатие кнопки Канцел приводит к остановке этого процесса.

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

К сожалению, я не помню, но вроде бы я эту статью видел на русском MSDN (не буду врать не помню).
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог