2016-12-15 2 views
-3

Я разрабатываю небольшое приложение, в котором я открываю новую форму с некоторыми элементами управления. Я хочу закрыть эту форму, если простаиваю какое-то время. Пусть говорят, что у формы есть много кнопок, полос прокрутки, окна с картинками .... если ни один из них не щелкнут (в течение 10 секунд) форма должна закрыться.Обнаружение любого нажатия клавиши управления

Я использовал таймер 10 секунд, я хочу сбросить его, если какой-либо элемент управления нажат. Я могу сделать это индивидуально, но станет очень громоздким, делая это для всех элементов управления. Могу ли я сделать это более простым способом .... Я прочитал в сети:

foreach (Control cc in Controls) 

но не знал, как его использовать. Пожалуйста помоги.

+0

разве не существует способа сделать способ, который вы добавляете ко всем символам событий onclick? Я думаю, что нет более короткого (менее кода) способа, чем это. –

+1

что это за приложение? Winforms, WPF, ASP.Net Web Forms или MVC? –

ответ

0

Это поможет вам начать

private void Form1_Load(object sender, EventArgs e) 
    { 
     foreach(Control control in this.Controls) 
     { 
      control.Click += Oncontrol_Click; 
     } 
    } 

    private void Oncontrol_Click(object sender, EventArgs e) 
    { 
     Control control = sender as Control; 
     MessageBox.Show($"{control.Text} is clicked"); 
    } 
0

Вы можете связать событие щелчка, чтобы все элементы управления внутри цикла foreach.

foreach (Control c in Controls) 
{ 
    c.Click += (o, args) => ResetTimer(); 
} 

Теперь каждый раз, когда пользователь щелкает элемент управления, ResetTimer() увольняют.

0

Вы должны сделать это, чтобы добавить событие щелчка, чтобы все элементов управления на форме:

private void Form1_Load(object sender, EventArgs e) 
    { 
     AttachHandler(this, (s, e2) => ResetTimer()); 
    } 

    private void AttachHandler(Control control, EventHandler handler) 
    { 
     control.Click += handler; 
     foreach (Control c in control.Controls) 
     { 
      AttachHandler(c, handler); 
     } 
    } 

Она должна рекурсивно спускаться все элементы управления, которые могут содержать другие элементы управления.

+0

Спасибо за ваш ответ. Решение было полезным, но если в форме панели есть некоторые элементы управления, они не отражают, должны ли они обрабатываться отдельно –

+0

@AmitGarg - Что значит «они не отражают»? Этот код также должен прикреплять обработчик для элементов управления на панелях. – Enigmativity

+0

Извините за путаницу. Код работает правильно для кнопок, но не работает для полос прокрутки (горизонтальная полоса прокрутки/вертикальная полоса прокрутки/прокрутка текстового поля). Можете ли вы проконсультироваться –

Смежные вопросы