请教一个Winform窗体的问题

leon51 2021-05-21 09:46:28
我扩展了TextBox,增加了数据校验。
如果校验失败就用MessageBox提醒。
然后界面放了很多TextBox,希望数据校验失败时阻止关闭窗体。

目前能想到的是给Textbox增加一属性,比如TypeError,在窗体的Form_Closing事件中遍历所有属性,如果有TypeError为true,就阻止关闭窗体。
请问有没有其它更好的方式?
...全文
137 点赞 收藏 5
写回复
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
xuzuning 05-23
希望数据校验失败时阻止关闭窗体。??? 那么关机,切断电源 是否也在阻止之列?
回复
var a=1; foreach { a*=textbox.check() } if a=0 return var b=true; foreach{ b=b&&texbox.check() } if b=false return
回复
逻辑没有毛病 但流程可以优化 首先应该继承一个借口 需要验证的控件实现此接口 因为你需要的控件肯定不止textbox 单说textbox 要先设计一个枚举 因为验证有很多中 比如 必须是数字或者不能为空,或者格式满足 提醒不能用messagebox 会阻塞主线程 你总不能先提醒一个 然后用户改完了 点确定 再提醒一个吧 不友好 应该是循环的时候把所有不符合的都显示 可以给需要验证的控件 添加一个errorProvider 控件内部验证,设置seterror 并返回 至于返回什么 可以返回1,0 或者 true,false int类型 外面的循环用乘法 bool类型 外边循环用与运算
回复
wtnu200 05-22
方法没有问题,但可以优化一下,不用给每个Textbox加TypeError,只需要一个List<string> errTBNameList,有错就把textbox的Name存到List,关闭时只需要判断List.Count>0就不能关
回复
leon51 05-22
引用 1 楼 wtnu200 的回复:
方法没有问题,但可以优化一下,不用给每个Textbox加TypeError,只需要一个List<string> errTBNameList,有错就把textbox的Name存到List,关闭时只需要判断List.Count>0就不能关
引用 2 楼 qq_30335331 的回复:
逻辑没有毛病 但流程可以优化 首先应该继承一个借口 需要验证的控件实现此接口 因为你需要的控件肯定不止textbox 单说textbox 要先设计一个枚举 因为验证有很多中 比如 必须是数字或者不能为空,或者格式满足 提醒不能用messagebox 会阻塞主线程 你总不能先提醒一个 然后用户改完了 点确定 再提醒一个吧 不友好 应该是循环的时候把所有不符合的都显示 可以给需要验证的控件 添加一个errorProvider 控件内部验证,设置seterror 并返回 至于返回什么 可以返回1,0 或者 true,false int类型 外面的循环用乘法 bool类型 外边循环用与运算
感谢两位的解答。我是新建了一个类库来扩展TextBox的(编译后生成一个dll文件),命名为TextBoxEx。试过无法在TextBoxEx添加引用其它项目,IDE提示会造成循环引用。验证逻辑我放在TextBoxEx中,如果验证失败WinForm程序怎么样才能知道? 2楼的回复非常好,可是最后一句没有看明白。 int类型 外面的循环用乘法 bool类型 外边循环用与运算
回复
发动态
发帖子
C#
创建于2007-09-28

10.4w+

社区成员

.NET技术 C#
申请成为版主
社区公告

全世界最好的语言,没有之一.