Вызов метода Validate () элемента управления с использованием Reflection - PullRequest
2 голосов
/ 06 ноября 2008

Я сейчас нахожусь в процессе написания мастера и хочу, чтобы каждая страница была проверена, прежде чем перейти на следующую страницу.

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

Проблема в том, что метод Validate () на каждом дочернем элементе управления является закрытым, поэтому я не могу получить к нему доступ напрямую. Может кто-нибудь дать мне несколько советов о том, как получить результат от метода Validate () в TextBox (например), используя Reflection?

Большое спасибо!

Редактировать: Извините - должен был указать, это Windows Forms, .Net 2.0

Ответы [ 3 ]

3 голосов
/ 26 января 2010

Если страницы оказываются экземплярами ContainerControl, вы можете просто вызвать ValidateChildren. Если нет, то это похоже на индивидуальный элемент управления:

private void ValidateControl(Control control)
{
  Type type = control.GetType();
  type.InvokeMember("PerformControlValidation", BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.InvokeMethod, null, control, new object[] { true });
}
1 голос
/ 06 ноября 2008

Если вы говорите asp.net, вы можете установить атрибут ValidationGroup в элементе управления, а затем вызвать this.Validate("GroupName") на странице группы, которую вы хотите проверить.

Забудьте о группе и просто позвоните Validate(), если вам нужно проверить всю страницу.

0 голосов
/ 17 февраля 2010

Не нужно размышлять - вам нужно ContainerControl.ValidateChildren () (вызовите его в форме / диалоге)

Обратите внимание, что ContainerControl.Validate () будет проверять только последний элемент управления, имеющий фокус и его предков:

Метод Validate проверяет последний дочерний элемент управления, который не был проверен, и его предшественников через, но не включая текущий контейнерный элемент управления

Однако, если ваш родительский элемент управления не является ContainerControl (скажем, Panel), отражение действительно необходимо - см. Ответ NoBugz здесь

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