C # как я могу приостановить свою программу и ждать ввода с клавиатуры из WinForm - PullRequest
2 голосов
/ 22 июня 2010

У меня есть приложение C # 2008 Winform, и я нахожусь в середине цикла. Я показываю пользователю дату, и я хочу, чтобы он сообщил мне день недели, на который приходится эта дата. Например, 22.06.2010 отображается, и пользователь должен нажать t.

Я застрял в том, как приостановить приложение и дождаться ввода с клавиатуры? Я хочу ответить на Esc, m, t, w, h, f, s, u и ничего больше. Все другие нажатия клавиш будут игнорироваться.

В консольном приложении это будет Console.ReadLine (). Но как мне сделать это в приложении Winform?

Спасибо

Ответы [ 5 ]

3 голосов
/ 22 июня 2010

Возможно, вы могли бы использовать модальный диалог ...

Попытка придумать лучшее решение с точки зрения представления ...

2 голосов
/ 22 июня 2010

Вы неправильно поняли концепцию, программа для Windows всегда в цикле, ожидает.

Так что вам придется подумать о том, что вводить и что блокировать. Например, вы можете отменить событие FormClose (но, пожалуйста, оставьте пользователю что-нибудь, чтобы выйти).

Чтобы реализовать свою схему, используйте понятие «состояние», после правильного ввода вы переходите к следующему состоянию.

2 голосов
/ 22 июня 2010

Чтобы прочитать ключ, вам нужно ответить на событие KeyDown.

Тогда в обработчике есть что-то вроде:

if (e.KeyCode == Keys.M)
{

}

Хотя вы 'Возможно, вам понадобится оператор switch, а не серия ifs.

Вам нужно подумать и о том, как вы представили дату пользователю, если она находится в главной форме или в диалоговом окне модели (какдругие предложили).

2 голосов
/ 22 июня 2010

Создать модальное диалоговое окно, запрашивающее ввод.

1 голос
/ 22 июня 2010

Когда вам нужна некоторая информация во время вычисления (цикл в вашем случае), вы можете использовать метод обратного вызова, чтобы получить эту информацию.

int Calculate( Func<DateTime, string> callback )
{
  var result = callback( dateTime );
}

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

РЕДАКТИРОВАТЬ:
Вам известно о свойстве DateTime.DayOfWeek ?Может быть, вы вообще можете пропустить диалог пользователя.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...