Как я могу получить ссылку на текущую активную модальную форму? - PullRequest
7 голосов
/ 14 июля 2009

Я пишу небольшой класс для тестирования интеграции в форме заявки на выигрыш. Класс драйвера теста имеет доступ к основной Форме, ищет элемент управления, который должен использоваться по имени, и использует его для запуска теста. Чтобы найти элемент управления, я обхожу дерево Control.Controls. Однако я застреваю, когда хочу перейти к элементам управления в диалоговом окне (пользовательская форма отображается в виде диалога). Как я могу получить это?

Ответы [ 3 ]

26 голосов
/ 14 июля 2009

Вы можете получить ссылку на текущую активную форму, используя статическое свойство Form.ActiveForm.

Редактировать: если нет Form с фокусом, Form.ActiveForm вернет null.
Один из способов обойти это - использовать коллекцию Application.OpenForms и извлечь элемент last , ведь ведьма будет активной Form, когда она отображается с помощью ShowDialog:

// using Linq:
lastOpenedForm = Application.OpenForms.Cast<Form>().Last()
// or (without Linq):
lastOpenedForm = Application.OpenForms[Application.OpenForms.Count - 1]
0 голосов
/ 14 июля 2009

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

Я имею в виду, что ShowDialog будет "удерживать" поток, в котором была создана форма, и не вернет управление приложению (или вашему тестовому классу), пока ShowDialog не завершит обработку, и в этом случае Ваш код пользователя будет продолжать свой путь.

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

0 голосов
/ 14 июля 2009

Я не уверен, что вы можете получить доступ к элементам управления в предварительно построенном диалоговом окне; Кажется, они все упакованы вместе. Возможно, вам повезет больше, если вы создадите собственное диалоговое окно, которое будет делать то, что вы хотите. Затем вы можете получить доступ к элементам управления внутри него.

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