请教一个Winform窗体的问题

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

目前能想到的是给Textbox增加一属性,比如TypeError,在窗体的Form_Closing事件中遍历所有属性,如果有TypeError为true,就阻止关闭窗体。
请问有没有其它更好的方式?
...全文
172 5 打赏 收藏 举报
写回复
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
xuzuning 2021-05-23
希望数据校验失败时阻止关闭窗体。??? 那么关机,切断电源 是否也在阻止之列?
  • 打赏
  • 举报
回复
qq_30335331 2021-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
  • 打赏
  • 举报
回复
qq_30335331 2021-05-22
逻辑没有毛病 但流程可以优化 首先应该继承一个借口 需要验证的控件实现此接口 因为你需要的控件肯定不止textbox 单说textbox 要先设计一个枚举 因为验证有很多中 比如 必须是数字或者不能为空,或者格式满足 提醒不能用messagebox 会阻塞主线程 你总不能先提醒一个 然后用户改完了 点确定 再提醒一个吧 不友好 应该是循环的时候把所有不符合的都显示 可以给需要验证的控件 添加一个errorProvider 控件内部验证,设置seterror 并返回 至于返回什么 可以返回1,0 或者 true,false int类型 外面的循环用乘法 bool类型 外边循环用与运算
  • 打赏
  • 举报
回复
wtnu200 2021-05-22
方法没有问题,但可以优化一下,不用给每个Textbox加TypeError,只需要一个List<string> errTBNameList,有错就把textbox的Name存到List,关闭时只需要判断List.Count>0就不能关
  • 打赏
  • 举报
回复
leon51 2021-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#

10.8w+

社区成员

.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
帖子事件
创建了帖子
2021-05-21 09:46
社区公告

让您成为最强悍的C#开发者