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

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

相关文章

mss32.dll文件丢失怎么办? 电脑提示mss32.dll丢失的多种修复方法

《mss32.dll文件丢失怎么办?电脑提示mss32.dll丢失的多种修复方法》最近,很多电脑用户可能遇到了mss32.dll文件丢失的问题,导致一些应用程序无法正常启动,那么,如何修复这个问题呢... 在电脑常年累月的使用过程中,偶尔会遇到一些问题令人头疼。像是某个程序尝试运行时,系统突然弹出一个错误提

电脑提示找不到openal32.dll文件怎么办? openal32.dll丢失完美修复方法

《电脑提示找不到openal32.dll文件怎么办?openal32.dll丢失完美修复方法》openal32.dll是一种重要的系统文件,当它丢失时,会给我们的电脑带来很大的困扰,很多人都曾经遇到... 在使用电脑过程中,我们常常会遇到一些.dll文件丢失的问题,而openal32.dll的丢失是其中比较

电脑提示msvcp90.dll缺少怎么办? MSVCP90.dll文件丢失的修复方法

《电脑提示msvcp90.dll缺少怎么办?MSVCP90.dll文件丢失的修复方法》今天我想和大家分享的主题是关于在使用软件时遇到的一个问题——msvcp90.dll丢失,相信很多老师在使用电脑时... 在计算机使用过程中,可能会遇到 MSVCP90.dll 丢失的问题。MSVCP90.dll 是 Mic

电脑开机提示krpt.dll丢失怎么解决? krpt.dll文件缺失的多种解决办法

《电脑开机提示krpt.dll丢失怎么解决?krpt.dll文件缺失的多种解决办法》krpt.dll是Windows操作系统中的一个动态链接库文件,它对于系统的正常运行起着重要的作用,本文将详细介绍... 在使用 Windows 操作系统的过程中,用户有时会遇到各种错误提示,其中“找不到 krpt.dll”

CSS模拟 html 的 title 属性(鼠标悬浮显示提示文字效果)

《CSS模拟html的title属性(鼠标悬浮显示提示文字效果)》:本文主要介绍了如何使用CSS模拟HTML的title属性,通过鼠标悬浮显示提示文字效果,通过设置`.tipBox`和`.tipBox.tipContent`的样式,实现了提示内容的隐藏和显示,详细内容请阅读本文,希望能对你有所帮助... 效

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脚