2015-03-19 5 views
0

Я использую winforms в течение многих лет. Обычно я пишу форму и эту форму, в коде позади делает все (проверяет ввод пользователя, общается с базой данных ...). Недавно друг познакомил меня с MVP, и я пытался научиться его использовать. Проблема, с которой я сталкиваюсь, дублирует некоторые вещи, которые я использовал, чтобы иметь возможность делать с формой. Например, в прошлом, если у меня было текстовое поле, и пользователь ввел что-то недействительное в текстовое поле, я мог бы повернуть это текстовое поле красным, установить фокус на текстовое поле и предупредить пользователя о том, что они ввели что-то недействительное в этом тестовом поле. Теперь, когда моя проверка выполняется на уровне презентатора или модели, я могу сообщить пользователю сообщения, что что-то недействительно, но как я могу настроить фокусировку на элемент управления или изменить цвет управления?Проверка контроля пользовательского интерфейса с представлением модели Presenter (MVP)

+0

Я использую MVP в течение многих лет, но проверка TextBox находится в представлении. in Оставить событие Если TextBox1.Text = "", тогда BackColor = Color.Red EndIf .. или в кнопке Save, где вы проверяете все текстовые поля. – CristiC777

+0

Лучший способ установить для свойства textbox.causevalidation значение true, затем выберите проверительный обработчик событий , В этом случае напишите свой подтверждающий код, и если textbox.text не соответствует условию, выберите e.cancel. В этом случае пользователь не может покинуть текстовое поле, пока не будет записано соответствующее значение . Поиск «Проверенного события» в справке VS. – CristiC777

+0

@ CristiC777 Мне очень неприятно, если мне не разрешено оставлять текстовое поле, пока оно не будет действительным. Я хочу вернуться и исправить значение на моих собственных условиях. – jhyot

ответ

0

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

Валидация сама по себе должна быть выполнена в модели, поскольку она независима от вида.

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

Смежные вопросы