Дизайн на чеке содержания изображения
Во-первых, определить интерфейс
открытый интерфейс IValidator {
недействительного Подтвердить (значение объекта);
}
И виртуальные классы
общественного абстрактного класса AbstractValidator {
частная строка ErrorMessage;
публичная строка ErrorMessage {
получить {вернуться ErrorMessage; }
Множество {ErrorMessage = значение; }
}
защищенный BOOL IsEmptyString (объект OBJ) {
если (объект == NULL || obj.ToString () == string.Empty) {
возвращает истину;
} Еще {
вернуться ложным;
}
}
общественный AbstractValidator () {
возвращение;
}
}
Затем определяют каждый конкретный класс проверки, например, только половина размера буквенно-цифровой вход проверки
общественный класс AlphabetAndNumberValiator: AbstractValidator, IValidator {
общественного недействительными Подтвердить (значение объекта) {
Regex регулярное выражение = новый Regex (@ "[A-Za-Z0-9]");
(! Regex.IsMatch (value.ToString ())) , если {
певд ValidatorException (this.ErrorMessage);
}
}
AlphabetAndNumberValiator общественности () {
this.ErrorMessage = "Пожалуйста , введите половину размера буквенно - цифровой";
}
}
Наконец, определение контейнера
общественный класс ActiveValidator {
частный ErrorProvider ErrorProvider;
частный Dictionary <Control, List <IValidator >> DIC = новый словарь <Control, List <IValidator >> ();
частная BOOL isAutoAddEventHandler = истина;
общественного BOOL IsAutoAddEventHandler {
получить {вернуться isAutoAddEventHandler; }
Множество {isAutoAddEventHandler = значение; }
}
общественного недействительными AddValidator (контроль управления, IValidator валидатор) {
если (dic.ContainsKey (контроль)) {
если (DIC [контроль] .Contains (валидатор) == FALSE) {
DIC [контроль] .Add (валидатор);
}
} Еще {
список List <IValidator> = новый List <IValidator> ();
list.Add (валидатор);
dic.Add (контроль, список);
control.Validating + = новый CancelEventHandler (this.DoValidation);
}
}
общественного BOOL DoAllValidation () {
this.errorProvider.Clear ();
BOOL RET = ложь;
Еогеасп (контроль управления в dic.Keys) {
Еогеасп (IValidator валидатор выпо [управления]) {
попробуйте {
validator.Validate (control.Text);
} Задвижка (ValidatorException ех) {
this.errorProvider.SetError (контроль, ex.Message);
RET = TRUE;
}
}
}
Возврата RET;
}
частная пустота DoValidation (объект отправителя, EventArgs е) {
если (this.isAutoAddEventHandler) {
this.errorProvider.Clear ();
Управление контроля;
если (отправитель управление) {
контроля = (контроль) отправитель;
} Еще {
возвращение;
}
Список List <IValidator>;
если (dic.ContainsKey (контроль)) {
список = DIC [контроль];
} Еще {
возвращение;
}
Еогеасп (IValidator валидатор в списке) {
попробуйте {
validator.Validate (control.Text);
} Задвижка (ValidatorException ех) {
this.errorProvider.SetError (контроль, ex.Message);
// TODO
}
}
}
}
общественного ActiveValidator (ErrorProvider ErrorProvider) {
this.errorProvider = ErrorProvider;
}
}
Пример экрана дополнительный класс
this.validator = новый ActiveValidator (this.errorProvider);
this.validator.AddValidator (this.TextBox1, новый AlphabetAndNumberValiator ());
В то же время, в случае нажмите на кнопку отправить кнопки, или вы можете вызвать this.validator.DoAllValidation (), не проверить управление регистрацией полноэкранное.
Воспроизводится в: https: //my.oschina.net/cjkall/blog/195903