日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

一些设计思想的汇集(2)

發(fā)布時間:2025/4/16 编程问答 49 豆豆
生活随笔 收集整理的這篇文章主要介紹了 一些设计思想的汇集(2) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

為什么80%的碼農(nóng)都做不了架構師?>>> ??

關于畫面內(nèi)容的check的設計

首先定義接口

public interface IValidator {
??? void Validate(object value);
}

及虛類

public abstract class AbstractValidator {

??? private string errorMessage;
??? public string ErrorMessage {
??????? get { return errorMessage; }
??????? set { errorMessage = value; }
??? }

??? protected bool IsEmptyString(object obj) {
??????? if (obj == null || obj.ToString() == string.Empty) {
??????????? return true;
??????? } else {
??????????? return false;
??????? }
??? }

??? public AbstractValidator() {
??????? return;
??? }
}

然后定義各個具體的check類,比如只能輸入半角英數(shù)字的check

public class AlphabetAndNumberValiator : AbstractValidator, IValidator {

??? public void Validate(Object value) {
??????? Regex regex = new Regex(@"[a-zA-Z0-9]");
??????? if (!regex.IsMatch(value.ToString())) {
??????????? throw new ValidatorException(this.ErrorMessage);
??????? }
??? }

??? public AlphabetAndNumberValiator() {
??????? this.ErrorMessage = "請輸入半角英數(shù)字";
??? }
}?

最后定義容器

public class ActiveValidator {

??? private ErrorProvider errorProvider;

??? private Dictionary<Control, List<IValidator>> dic = new Dictionary<Control, List<IValidator>>();

??? private bool isAutoAddEventHandler = true;
??? public bool IsAutoAddEventHandler {
??????? get { return isAutoAddEventHandler; }
??????? set { isAutoAddEventHandler = value; }
??? }

??? public void AddValidator(Control control, IValidator validator) {
??????? if (dic.ContainsKey(control)) {
??????????? if (dic[control].Contains(validator) == false) {
??????????????? dic[control].Add(validator);
??????????? }
??????? } else {
??????????? List<IValidator> list = new List<IValidator>();
??????????? list.Add(validator);
??????????? dic.Add(control, list);
??????????? control.Validating += new CancelEventHandler(this.DoValidation);
??????? }
??? }

??? public bool DoAllValidation() {
??????? this.errorProvider.Clear();
??????? bool ret = false;
??????? foreach (Control control in dic.Keys) {
??????????? foreach (IValidator validator in dic[control]) {
??????????????? try {
??????????????????? validator.Validate(control.Text);
??????????????? } catch (ValidatorException ex) {
??????????????????? this.errorProvider.SetError(control, ex.Message);
??????????????????? ret = true;
??????????????? }
??????????? }
??????? }
??????? return ret;
??? }

??? private void DoValidation(object sender, EventArgs e) {
??????? if (this.isAutoAddEventHandler) {
??????????? this.errorProvider.Clear();
??????????? Control control;
??????????? if (sender is Control) {
??????????????? control = (Control)sender;
??????????? } else {
??????????????? return;
??????????? }
??????????? List<IValidator> list;
??????????? if (dic.ContainsKey(control)) {
??????????????? list = dic[control];
??????????? } else {
??????????????? return;
??????????? }
??????????? foreach (IValidator validator in list) {
??????????????? try {
??????????????????? validator.Validate(control.Text);
??????????????? } catch (ValidatorException ex) {
??????????????????? this.errorProvider.SetError(control, ex.Message);
??????????????????? // TODO
??????????????? }
??????????? }
??????? }
??? }

??? public ActiveValidator(ErrorProvider errorProvider) {
??????? this.errorProvider = errorProvider;
??? }
}

?

畫面類追加例

??????????? this.validator = new ActiveValidator(this.errorProvider);
??????????? this.validator.AddValidator(this.TextBox1, new AlphabetAndNumberValiator());

同時,在提交button的click事件中,也可以調(diào)用this.validator.DoAllValidation(),做全畫面注冊控件的check.

轉(zhuǎn)載于:https://my.oschina.net/cjkall/blog/195903

總結

以上是生活随笔為你收集整理的一些设计思想的汇集(2)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。