vfp 怎么判断表单上的文本框不能为空 必填项 文本框很多

無法替代 2017-08-10 10:01:43
比如50个 名字无规律
一个一个判断是不是好傻的样子
...全文
1061 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
都市夜猫 2017-08-23
  • 打赏
  • 举报
回复
引用 13 楼 sdjnjdxc 的回复:
但是如果提示不能为空写在chkempty_assign中(用messagebox()),因为所有控件都执行setall,所以有多少空的,就提示多少次。不太好
你可以把 SetAll 理解为 Windows 的广播消息,只有拥有某属性的对象(相当于注册了某消息的接收者)才会收到此消息。 如果在控件的 assign 方法(相当于事件处理器)中给出提示不合适,可以将最后的处理权交给消息发送者,事件接收者只负责将自己的问题,记录在消息发送者提供的位置,它可以是一个表单变量,也可以是表单数组,更可以是一个表单方法(相当于回调函数)。例如,针对此贴检查为空的需求,可以有很多处理方法: *-- a. 控件,procedure chkempty_assign If Empty(This.Value) ii = 1 + Alen(Thisform.objs) Dimension Thisform.objs[ii] Thisform.objs[ii] = This Endif *-- b.表单,自己的方法 或 一检查按钮的 click Thisform.AddProperty('objs[1]') Thisform.SetAll('chkempty', 1) ** 接下来怎么处理,看需求是什么了 ** 反正执行都这里,objs 数组中已经记录了所有值为空的对象
xilaianzxsc 2017-08-23
  • 打赏
  • 举报
回复
你说:50个,且名字无规律,一个一个判断是不是好傻. 其实,你的源代码,别人又不去看. 别人不看,别人就不会认为你傻. 充其量,是自己认为自己傻. 自己认为自己傻,这又何苦呢....
xilaianzxsc 2017-08-23
  • 打赏
  • 举报
回复
我一般是这么做的. 当然,我的方法,比较笨 在保存按钮里面,写: if empty(thisform.text1.value) messagebox("此处不可为空",16,"出错") else if empty(thisform.text2.value) messagebox("此处不可为空",16,"出错") else if empty(thisform.text3.value) messagebox("此处不可为空",16,"出错") else .............把所有text全部列出来. 有多少个,列多少个. endif endif endif
sdjnjdxc 2017-08-23
  • 打赏
  • 举报
回复
原理明白了 第二段代码干什么用没明白
sdjnjdxc 2017-08-23
  • 打赏
  • 举报
回复
引用 18 楼 xilaianzxsc 的回复:
你说:50个,且名字无规律,一个一个判断是不是好傻. 其实,你的源代码,别人又不去看. 别人不看,别人就不会认为你傻. 充其量,是自己认为自己傻. 自己认为自己傻,这又何苦呢....
呵呵
sdjnjdxc 2017-08-22
  • 打赏
  • 举报
回复
LPARAMETERS vNewVal *To do: Modify this routine for the Assign method THIS.checkempty = m.vNewVal IF EMPTY(this.Value) =MESSAGEBOX("数据不能为空",0+48,"提示") this.SetFocus endif
sdjnjdxc 2017-08-22
  • 打赏
  • 举报
回复
引用 12 楼 dkfdtf 的回复:
原来不是要做输入为空的检查,白忙活儿了 要在保存前检查,一样也是用子类化 TextBox 最简单,例如: 子类中加一个属性 ChkEmtpy,带上 assign 方法,保存前 执行一次 Thisform.SetAll('chkempty', .T.),这样所有的子类都会执行它的 chkempty_assign 方法,只要在子类中的该方法上检查 This.value 值,为空则弹出提示并 This.SetFoucs() 即可 sdjnjdxc 的方法也不失为一种简单有效的方法。但有一缺点,就是要自己遍历所有的控件,这会有两个问题:首先,不一定所有基于 TextBox 的控件都会要求不能为空;其次,如果表单布局很复杂,各种容器类对象嵌套的话,遍历过程将很复杂,而使用 SetAll 方法,遍历过程便交给了 vfp 去实现,不需要担心有哪些种类的容器,嵌套了多少层,否则,遇到 pageframe 得遍历 pages,遇到 grid 得遍历 columns,其他要遍历 controls
谢谢版主 试了一下你的方法,很不错。但是如果提示不能为空写在chkempty_assign中(用messagebox()),因为所有控件都执行setall,所以有多少空的,就提示多少次。不太好
無法替代 2017-08-12
  • 打赏
  • 举报
回复
引用 10 楼 sdjnjdxc 的回复:
在保存时调用我的代码
谢谢 你这个方法可以
都市夜猫 2017-08-12
  • 打赏
  • 举报
回复
原来不是要做输入为空的检查,白忙活儿了 要在保存前检查,一样也是用子类化 TextBox 最简单,例如: 子类中加一个属性 ChkEmtpy,带上 assign 方法,保存前 执行一次 Thisform.SetAll('chkempty', .T.),这样所有的子类都会执行它的 chkempty_assign 方法,只要在子类中的该方法上检查 This.value 值,为空则弹出提示并 This.SetFoucs() 即可 sdjnjdxc 的方法也不失为一种简单有效的方法。但有一缺点,就是要自己遍历所有的控件,这会有两个问题:首先,不一定所有基于 TextBox 的控件都会要求不能为空;其次,如果表单布局很复杂,各种容器类对象嵌套的话,遍历过程将很复杂,而使用 SetAll 方法,遍历过程便交给了 vfp 去实现,不需要担心有哪些种类的容器,嵌套了多少层,否则,遇到 pageframe 得遍历 pages,遇到 grid 得遍历 columns,其他要遍历 controls
無法替代 2017-08-11
  • 打赏
  • 举报
回复
引用 8 楼 TopStop 的回复:
[quote=引用 6 楼 dkfdtf 的回复:] CSDN 越来越恶心了,帖子不能直接带附件,非得要作为资源上传再帖连接。以前还可以自己输入0积分,现在倒好,改成下拉框,积分没得0可选,要下载就得耗积分了 有分的话,就直接看示例吧:http://download.csdn.net/download/dkfdtf/9928042 下载解压后,打开 proj1.pjx,切换到 Code 标签,运行 test.prg 要分析的话,看 from1 中的4个 txt 控件,它们都是从 test 类库中拖到 from1 上的,就设置一个属性AllowEmpty,不需要写代码。不允许留空的功能,看类库中从 TextBox 派生的 txt 子类,代码在 GotFoucs / LostFoucs 方法中。
你好 这个应该是只有触发 LostFoucs事件才可以[/quote] 如果用户打开表单 直接点 保存 这样就不好控制了
無法替代 2017-08-11
  • 打赏
  • 举报
回复
引用 6 楼 dkfdtf 的回复:
CSDN 越来越恶心了,帖子不能直接带附件,非得要作为资源上传再帖连接。以前还可以自己输入0积分,现在倒好,改成下拉框,积分没得0可选,要下载就得耗积分了 有分的话,就直接看示例吧:http://download.csdn.net/download/dkfdtf/9928042 下载解压后,打开 proj1.pjx,切换到 Code 标签,运行 test.prg 要分析的话,看 from1 中的4个 txt 控件,它们都是从 test 类库中拖到 from1 上的,就设置一个属性AllowEmpty,不需要写代码。不允许留空的功能,看类库中从 TextBox 派生的 txt 子类,代码在 GotFoucs / LostFoucs 方法中。
你好 这个应该是只有触发 LostFoucs事件才可以
sdjnjdxc 2017-08-11
  • 打赏
  • 举报
回复
在保存时调用我的代码
都市夜猫 2017-08-10
  • 打赏
  • 举报
回复
子类化文本框控件啊,难道不用类库的吗?
作为一项原则,永远不要直接使用原生控件,都要子类化以后再使用,这样,一旦你想加任何功能,只要修改一次子类就好了。
sdjnjdxc 2017-08-10
  • 打赏
  • 举报
回复
建立一个循环,遍历所有控件
sdjnjdxc 2017-08-10
  • 打赏
  • 举报
回复
谢谢版主,下来学习
都市夜猫 2017-08-10
  • 打赏
  • 举报
回复
CSDN 越来越恶心了,帖子不能直接带附件,非得要作为资源上传再帖连接。以前还可以自己输入0积分,现在倒好,改成下拉框,积分没得0可选,要下载就得耗积分了 有分的话,就直接看示例吧:http://download.csdn.net/download/dkfdtf/9928042 下载解压后,打开 proj1.pjx,切换到 Code 标签,运行 test.prg 要分析的话,看 from1 中的4个 txt 控件,它们都是从 test 类库中拖到 from1 上的,就设置一个属性AllowEmpty,不需要写代码。不允许留空的功能,看类库中从 TextBox 派生的 txt 子类,代码在 GotFoucs / LostFoucs 方法中。
sdjnjdxc 2017-08-10
  • 打赏
  • 举报
回复
子类化: 在刚这个例子,在textbox的子类中,增加什么功能帮助检查是不是为空?谢谢
sdjnjdxc 2017-08-10
  • 打赏
  • 举报
回复
引用 2 楼 dkfdtf 的回复:
子类化文本框控件啊,难道不用类库的吗? 作为一项原则,永远不要直接使用原生控件,都要子类化以后再使用,这样,一旦你想加任何功能,只要修改一次子类就好了。
请版主举个例子吧,谢谢
sdjnjdxc 2017-08-10
  • 打赏
  • 举报
回复
FOR i=1 to thisform.ControlCount IF thisform.Controls(i).baseclass="Textbox" IF EMPTY(thisform.Controls(i).value ) =messagebox(thisform.Controls(i).name+"内容不能为空") ENDIF ENDIF endfor

2,727

社区成员

发帖
与我相关
我的任务
社区描述
VFP,是Microsoft公司推出的数据库开发软件,用它来开发数据库,既简单又方便。
社区管理员
  • VFP社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧