Compact Framework - отключение событий мыши во время загрузки - PullRequest
2 голосов
/ 28 января 2009

Утро всем,

Я разрабатываю несколько приложений для компактных фреймворков, и что-то, что всегда ускользает от меня, - это способ предотвратить то, что мы называем синдромом йоркширского банка (ybs). YBS назван с любовью в честь наличных в Yorkshire Bank из-за того, что их обновление экрана происходит так медленно, и один из моих коллег дважды нажал кнопку, думая, что он не нажал кнопку, и в итоге получил 100 фунтов вместо требуемые 20 фунтов стерлингов (кнопки «Наличные без квитанции» и «100 фунтов стерлингов» были назначены одной и той же кнопке на двух разных экранах).

По сути, я загружаю все свои формы с заставкой в ​​начале приложения, и у каждой другой формы есть открытое событие Initialise (). Чтобы показать форму, я использовал Session.Instances.FormName.Initialise (), затем сделал showdialog ().

Метод Initialise () обычно вызывает некоторый сброс формы или загрузку данных, поэтому, в свою очередь, Cursor также устанавливается в этом методе. Проблема возникает, когда пользователь нажимает кнопку, чтобы показать форму, форма загружается, но если они щелкают по экрану в то же время, этот щелчок экрана передается в форму, которая в данный момент загружается (но не отображается).

Например, я нажимаю кнопку, чтобы показать форму, а затем щелкаю в левом нижнем углу экрана. В большинстве моих CF-приложений кнопка в правом нижнем углу - это кнопка «Назад», которая устанавливает DialogResult.Cancel. Таким образом, после завершения загрузки форма не отображается при нажатии кнопки «Назад», хотя форма так и не была отображена.

Я пробовал несколько вещей, включая this.Enabled = false в начале Initialise (), но кажется, что щелчок сохраняется в фоновом режиме, а затем событие щелчка запускается на экран, когда загрузка имеет завершено.

Итак, теперь мне интересно, есть ли способ запретить любой ввод мышью во время загрузки и включить его только перед моим Form.ShowDialog ()? ИЛИ у кого-нибудь есть лучшие идеи, как этого добиться?

Ответы [ 2 ]

2 голосов
/ 28 января 2009

Крис Тэк создал ApplicationEx как часть OpenNETCF . Это позволяет получать каждое сообщение Windows, которое получает ваше приложение.

Вот пример его использования здесь .

0 голосов
/ 28 января 2009

Грубый метод, который я использовал в молодости, состоял в том, чтобы установить таймер для подключения событий к элементам пользовательского интерфейса в форме после загрузки. Это сделало работу в этом случае.

В наши дни у меня не было такой большой проблемы, особенно если я предварительно загружал формы. Возможно, проблема заключается в выполнении какой-либо формы длинных операций с данными в потоке пользовательского интерфейса при отображении формы?

Если вы хотите попасть на «хакерскую» территорию, вы всегда можете попробовать запустить приложение. DoEvents () где-то в неудачной попытке очистить буфер.

...