2012-04-02 2 views
1

Мне нужно отключить все выполнение какого-либо события (щелчок) в течение определенного периода времени после того, как я нажал кнопку. В этот конкретный период, независимо от того, сколько кнопок я нажимаю, кнопки кнопок не будут выполняться. Я не могу использовать Thread.Sleep(), потому что это только задерживает выполнение, функция кнопки все еще выполняется. Может ли кто-нибудь помочь? Мой код находится здесь:Отключение всего выполнения за период времени

int delay = 2000; //unusable as it is just delaying the execution of clicked button. 
public void PressCOM(string key) 
    { 
     if (key == "PressSc") 
     { 
      PressAndRelease(key); 
      PressAndRelease("C"); 

      Thread.Sleep(delay); 
     } 
+4

Вы должны удивляться, если вы не что-то не так, если это требование .. – Kolky

+0

@ Kolky - Я тоже так думал, но клиенты иногда спрашивают о странных вещах :) Было бы разумнее, если бы кнопки были снова включены, когда какая-либо операция, которая должна не возвращаются ". Либо это, либо в порядке очередности ввода операции, чтобы кнопки вообще не нужно было отключать. –

+0

Да, я не делаю что-то неправильно, отключив кнопки «Click for» после нажатия кнопки. Это связано только с небольшим количеством времени. Я хочу, чтобы этот код использовался для определенного пользовательского интерфейса. – hakunabean

ответ

4

Спящий по главной теме - плохая идея.

Вы должны построены в некоторой логике относительно кнопки либо:

  • отключить их
  • игнорировать щелчки

Используйте логическое свойство, которое сбрасывается с помощью таймера.

+0

Можете ли вы отключить всю форму/панель/независимо от того, на чем основаны кнопки? Не уверен в wpf. –

0

Возможное решение может заключаться в том, чтобы отобразить диалоговое окно и скрыть кнопки ОК, отменить и закрыть кнопки. Это предотвратит нажатие любой кнопки в главном окне.

+0

Я тоже об этом подумал, но это нехорошо ..... – hakunabean

2

Отключения и показывая «Пожалуйста, подождите ...» вид сообщения пользователя будет лучшим вариантом ...

Вы можете отключить и включить панели .Grids в WPF, как вам нравится

Я обычно использую Adorner Overlay (полупрозрачный) с сообщением, чтобы пользователь не мог взаимодействовать с пользовательским интерфейсом ... обычно рабочий стол Backround помогает показывать и скрывать наложение при необходимости.

This will be a Good Artice for Adorner implemtation in XAml

надеюсь, что это помогает .. :)

2

Это не совсем понятно, что вы хотите сделать.

Это не очень хорошая идея, чтобы уснуть в основной теме приложения. Это сделает ваше приложение неприемлемым для всех сообщений Windows (оба они созданы пользователем или самой Windows). Ваши пользователи заполнят его.

Если вам нужно отключить только эту кнопку, вы можете установить ее свойство IsEnabled на false, пользователь не сможет щелкнуть по нему.

Если вы хотите отключить все событий, вы можете использовать свойство IsEnabled самого окна.

Если отключить все элементы управления (или одну кнопку), это не подходящее решение для вас, вы можете использовать одно из следующих действий.

Добавить состояние переменная (или простой флаг). Во всех обработчиках событий вы проверите, истинна эта переменная или нет (вы измените ее с помощью таймера).Что-то вроде:

if (!_canHandleMouseClicks) 
    return false; 

Отключить все кнопки и повторно включить их после определенного периода времени:

private static IEnumerable<Button> FindAllButtons(DependencyObject obj) 
{ 
    if (obj == null) 
     return null; 

    int childrenCount = VisualTreeHelper.GetChildrenCount(obj); 
    for (int i = 0; i < childrenCount; ++i) 
    { 
     DependencyObject child = VisualTreeHelper.GetChild(obj, i); 

     if (child != null && child is Button) 
      yield return (Button)child; 

     // If you may have buttons inside buttons then uncomment these lines 
     //foreach (Button childOfChild in FindAllButtons(child)) 
     // yield return childOfChild; 
    } 
} 

Тогда вы можете написать:

foreach (Button button in FindAllButtons(window)) 
    button.IsEnabled = false; // true to re-enable 
+0

Thx для ур info, но моя кнопка состоит из изображений, поэтому я не думаю, что код ur может работать в моем случае. Но ур-код можно использовать в качестве будущей ссылки. – hakunabean

+0

Просто замените тип управления (изображение вместо кнопки или что-нибудь еще) ... –

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