【合作】总是弹出不能为空的提示

2024-08-26 19:18

本文主要是介绍【合作】总是弹出不能为空的提示,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

        在做组合查询时,不同的条件下,要判断不同的框"不能为空",在上一篇博客中说了如何判读文本框和组合框不能为空的问题,感觉这下就简单了,直接定义不能为空的控件数组,再调用方法就OK啦,可以省去很多MessageBox的使用。但是想的越简单越是出问题,具体如下:

        【知识点】

        组合查询中如何判读文本框和组合框是否为空,引用判读是否为空的方法确实简单,根据不同的条件,判读哪些不能为空。

        首先需要每一行定义一个过程,用来判断哪些框不能为空:

1.定义第一个过程Rdim(),作用是初始化第一行结构体数组:

<span style="font-size:18px;"><span style="font-size:18px;">Private Sub Rdim()'定义数组维数ReDim Preserve arrayControl(3)  '初始化数组arrayControl(0) = New element(cmbFieldBox1, "字段名")arrayControl(1) = New element(cmbMarkBox1, "操作符")arrayControl(2) = New element(txtContentBox1, "查询内容")
End Sub</span></span>

        2.定义第二个过程Rdim1(),作用是初始化第二行结构体数组:

<span style="font-size:18px;">Private Sub Rdim1()'定义数组维数ReDim Preserve arrayControl(3)'初始化数组arrayControl(0) = New Element(cmbFieldBox2, "字段名")arrayControl(1) = New Element(cmbMarkBox2, "操作符")arrayControl(2) = New Element(txtContentBox2, "查询内容")End Sub</span>

 

        3.定义第三个过程Rdim2(),作用是初始化第三行结构体数组:

<span style="font-size:18px;">Private Sub Rdim2()'定义数组维数ReDim Preserve arrayControl(3)'初始化数组arrayControl(0) = New Element(cmbFieldBox3, "字段名")arrayControl(1) = New Element(cmbMarkBox3, "操作符")arrayControl(2) = New Element(txtContentBox3, "查询内容")End Sub</span>

 

        4.在点击查询时,哪些框不能空,直接调用上面的过程即可。代码如下:

<span style="font-size:18px;"><span style="font-size:18px;">      '当两个组合关系都为空时, 第一行不能为空If cmbRelationBox1.Text.Trim = "" Then'首先调用Rdim()过程第一行进行数组初始化Call Rdim()'再调用 IsSomeEmptyText()函数,检查是否有空值If IsSomeEmptyText(arrayControl) ThenExit SubEnd If'当第一个组合关系不为空第二个为空时, 前两行不能为空ElseIf cmbRelationBox2.Text.Trim = "" Then'首先调用Rdim()和Rdim2()过程,前两行进行数组初始化Call Rdim()Call Rdim1()If IsSomeEmptyText(arrayControl) ThenExit SubEnd If'当两个组合关系都不为空时, 三行都不能为空Else'首先调用Rdim()/Rdim1()/Rdim2()过程,三行进行数组初始化Call Rdim()Call Rdim1()Call Rdim2()If IsSomeEmptyText(arrayControl) ThenExit SubEnd IfEnd If</span></span>
        感觉这样写完,条理清晰,逻辑正确,肯定没问题,但是一运行发现问题了。按着上面判断的过程将组合框点第一遍没有问题,但是当再使两个组合关系为空,后两行不可用时,出现如下问题:

        从代码中可以明确的看出,当组合关系1为空时,只判断第一行是否有空值。从上图也可看到,组合关系1确实为空,而且第一行已经没有空值。所以当时就想不通了,为什么还会提示”不能为空!"呢。逻辑判断出了问题吗?整来整去,感觉没有问题。那问题出哪儿了?最后把目标锁定到了“ReDim Preserve”。

        ReDim Preserve是什么,不就是定义数组大小维数的吗?之前也没细想,不懂了还是要问问度娘。

        ReDim 为数组变量重新分配存储空间。可选项修饰符 Preserve 当仅更改最后一个维度的大小时,用来保留现有数组中的数据。使用 ReDim 语句来更改某个已声明数组的一个或多个维度的大小。如果有一个较大的数组,并且您不再需要它的某些元素,ReDim 可通过减小数组大小来释放内存。另一方面,如果代码确定某个数组需要更多元素,ReDim 也可以添加它们。

        简单点说,ReDim是重新定义数组的大小,修饰符 Preserve 使数组中已赋值的那些数据不被清空,这也就能说明我上面的问题了。当第一次调用三行的Rdim后,数据被赋值,就不能被清空了,即使控件里被清空了,但是实际还是会显示“不能为空!"的提示。

        所以解决办法也很简单,把ReDim Preserve arrayControl(3) 的修饰符Preserve去掉就OK了。

        【小结】

        其实问题并不难,但是开始遇到会想不明白为什么会出现这个问题,总是觉得哪儿哪儿都没问题,从逻辑上来讲自己是想不通的,其实这时候就需要停下来好好想想,既然觉得逻辑没问题,那问题会出在哪儿。肯定是自己不太熟悉的地方,只是用到了,并不是很了解的的地方。就像上面的问题,如果真的理解ReDim Preserve估计就不会出现这样的问题了吧。


这篇关于【合作】总是弹出不能为空的提示的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1109444

相关文章

Mybatis提示Tag name expected的问题及解决

《Mybatis提示Tagnameexpected的问题及解决》MyBatis是一个开源的Java持久层框架,用于将Java对象与数据库表进行映射,它提供了一种简单、灵活的方式来访问数据库,同时也... 目录概念说明MyBATis特点发现问题解决问题第一种方式第二种方式问题总结概念说明MyBatis(原名

Ubuntu 24.04 LTS怎么关闭 Ubuntu Pro 更新提示弹窗?

《Ubuntu24.04LTS怎么关闭UbuntuPro更新提示弹窗?》Ubuntu每次开机都会弹窗提示安全更新,设置里最多只能取消自动下载,自动更新,但无法做到直接让自动更新的弹窗不出现,... 如果你正在使用 Ubuntu 24.04 LTS,可能会注意到——在使用「软件更新器」或运行 APT 命令时,

提示:Decompiled.class file,bytecode version如何解决

《提示:Decompiled.classfile,bytecodeversion如何解决》在处理Decompiled.classfile和bytecodeversion问题时,通过修改Maven配... 目录问题原因总结问题1、提示:Decompiled .class file,China编程 bytecode

Ilya-AI分享的他在OpenAI学习到的15个提示工程技巧

Ilya(不是本人,claude AI)在社交媒体上分享了他在OpenAI学习到的15个Prompt撰写技巧。 以下是详细的内容: 提示精确化:在编写提示时,力求表达清晰准确。清楚地阐述任务需求和概念定义至关重要。例:不用"分析文本",而用"判断这段话的情感倾向:积极、消极还是中性"。 快速迭代:善于快速连续调整提示。熟练的提示工程师能够灵活地进行多轮优化。例:从"总结文章"到"用

jenkins 插件执行shell命令时,提示“Command not found”处理方法

首先提示找不到“Command not found,可能我们第一反应是查看目标机器是否已支持该命令,不过如果相信能找到这里来的朋友估计遇到的跟我一样,其实目标机器是没有问题的通过一些远程工具执行shell命令是可以执行。奇怪的就是通过jenkinsSSH插件无法执行,经一番折腾各种搜索发现是jenkins没有加载/etc/profile导致。 【解决办法】: 需要在jenkins调用shell脚

解决Office Word不能切换中文输入

我们在使用WORD的时可能会经常碰到WORD中无法输入中文的情况。因为,虽然我们安装了搜狗输入法,但是到我们在WORD中使用搜狗的输入法的切换中英文的按键的时候会发现根本没有效果,无法将输入法切换成中文的。下面我就介绍一下如何在WORD中把搜狗输入法切换到中文。

【经验交流】修复系统事件查看器启动不能时出现的4201错误

方法1,取得『%SystemRoot%\LogFiles』文件夹和『%SystemRoot%\System32\wbem』文件夹的权限(包括这两个文件夹的所有子文件夹的权限),简单点说,就是使你当前的帐户拥有这两个文件夹以及它们的子文件夹的绝对控制权限。这是最简单的方法,不少老外说,这样一弄,倒是解决了问题。不过对我的系统,没用; 方法2,以不带网络的安全模式启动,运行命令行,输入“ne

多数据源的事务处理总是打印很多无用的log日志

之前做了一个项目,需要用到多数据源以及事务处理,在使用事务处理,服务器总是打印很多关于事务处理的log日志(com.atomikos.logging.Slf4jLogger),但是我们根本不会用到这些log日志,反而使得查询一些有用的log日志变得困难。那要如何屏蔽这些log日志呢? 之前的项目是提高项目打印log日志的级别,后来觉得这样治标不治本。 现在有一个更好的方法: 我使用的是log

为什么构造函数不能为虚函数

1,从存储空间角度     虚函数对应一个vtable,这大家都知道,可是这个vtable其实是存储在对象的内存空间的。问题出来了,如果构造函数是虚的,就需要通过 vtable来调用,可是对象还没有实例化,也就是内存空间还没有,无法找到vtable,所以构造函数不能是虚函数。 2,从使用角度         虚函数主要用于在信息不全的情况下,能使重载的函数得到对应的调

Ai+若依(智能售货机运营管理系统---帝可得)-人员管理-点位管理-区域管理-合作商管理----【08篇---0001:上】

项目介绍 售货机简介 帝可得是一个基于物联网概念下的智能售货机运营管理系统 物联网 物联网(IoT:Internet of Things)简单来说,就是让各种物品通过互联网连接起来,实现信息的交换和通信。 这个概念听起来可能有点抽象,但我们可以把它想象成一个超级大的社交网络。不过,这个网络里的成员不是人类,而是各种物品。比如,你的冰箱、洗衣机、甚至是你的汽车,它们都可以通过互联网互