2013-08-29 1 views
0

Я создаю систему IT-билетов/инвентаря, и программа выполнена, теперь я добавляю инструкции для конечных пользователей и других техников в нашей школе. Поскольку я знаю, что никто не прочитает руководство по эксплуатации, я решил сделать инструкции для каждого экрана и поместить их в Модальные Windows, активированные нажатием кнопки «Справка», которую я добавил в раздел «Команды экрана».OpenModalWindow выдает ошибку при первом запуске экрана

Это прекрасно работает, поэтому я решил захватить событие KeyDown и запустить окно, если они нажмут F1. Здесь ситуация становится немного странной. Если HelpWindow для этого конкретного экрана был открыт хотя бы один раз, нажатие F1 снова открывает его без проблем. Если он никогда не был открыт, нажатие F1 приводит к ошибке «Control» HelpWindow »не содержит модального окна. Нельзя использовать OpenModalWindow/CloseModalWindow. ' После закрытия этого сообщения об ошибке F1 запустит HelpWindow точно так, как ожидалось. Очень странно ...

информация

фона: Visual Studio 2012 Lightswitch проект VB (я работаю как в VB и C#, подбросили монету для этого проекта) модальное окно представляет собой группу на экране, что не видимый, с именем «HelpWindow»; Я использую OpenModalWindow("HelpWindow"), чтобы открыть его. Точная строка кода в коде HelpButton_Execute и обработчик событий для события KeyDown. Это тот же метод, который я использую для каждого другого модального окна в программе, для отправки новых билетов, добавления оборудования в инвентарь и т. Д. Эта проблема возникает только в обработчике событий и только при первом нажатии клавиши F1. Поведение одинаково на каждом экране с окном справки.

Мои попытки Google решить эту проблему были бесплодны. Кто-нибудь когда-либо видел это поведение раньше?

ответ

1

Это звучит очень странно. Я должен признать, что я сам не видел ничего подобного с модальным окном.

Вы не упоминаете где вы улавливание ключ KeyDown, так что это немного трудно комментировать.

То, что я видел иногда, особенно при выполнении чего-то немного «другого», является сообщением об ошибке, не сообщим вам о фактической причине проблемы.

Я хотел бы попробовать оборачивать код с диспетчером вызовом, чтобы убедиться, что вызов выполняется на правильном потоке, а также попробовать/улов, чтобы увидеть, если вы можете найти реальную причину ошибки:

Private Sub YourClickHandler 
    Try 
     Me.Details.Dispatcher.BeginInvoke(
      Sub() 
       OpenModalWindow("HelpWindow") 
      End Sub) 

    Catch ex As Exception 
     Me.ShowMessageBox(ex.Message) 
    End Try 
End Sub 

Надеюсь, что это поможет или, по крайней мере, указывает на то, что вы решили.

+0

Вы правы в том, что ошибки часто не точны. :) В созданном на экране методе я использую AddHandler («ScreenName»). ControlAvailable, Address of ScreenAvailable – bigelowr

+0

Случайно нажмите клавишу ввода слишком рано. В доступном на экране методе я делаю еще один AddHandler, на этот раз ищущее событие KeyDown. Я попробую диспетчера, когда вернусь к работе на следующей неделе. Благодарю. – bigelowr

+0

Звучит правильно. Я надеюсь, что использование диспетчерского вызова поможет. –