Некоторые коллекции дизайнерских идей (2)

Дизайн на чеке содержания изображения

Во-первых, определить интерфейс

открытый интерфейс 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

рекомендация

отblog.csdn.net/weixin_33766805/article/details/91756123