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

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

相关文章

电脑提示Winmm.dll缺失怎么办? Winmm.dll文件丢失的多种修复技巧

《电脑提示Winmm.dll缺失怎么办?Winmm.dll文件丢失的多种修复技巧》有时电脑会出现无法启动程序,因为计算机中丢失winmm.dll的情况,其实,winmm.dll丢失是一个比较常见的问... 在大部分情况下出现我们运行或安装软件,游戏出现提示丢失某些DLL文件或OCX文件的原因可能是原始安装包

电脑软件不能安装到C盘? 真相颠覆你的认知!

《电脑软件不能安装到C盘?真相颠覆你的认知!》很多人习惯把软件装到D盘、E盘,刻意绕开C盘,这种习惯从哪来?让我们用数据和案例,拆解背后的3大原因... 我身边不少朋友,在使用电脑安装软件的时候,总是习惯性的把软件安装到D盘或者E盘等位置,刻意避开C盘。如果你也有这样的习惯,或者不明白为什么要这么做,那么我

一文教你如何解决Python开发总是import出错的问题

《一文教你如何解决Python开发总是import出错的问题》经常朋友碰到Python开发的过程中import包报错的问题,所以本文将和大家介绍一下可编辑安装(EditableInstall)模式,可... 目录摘要1. 可编辑安装(Editable Install)模式到底在解决什么问题?2. 原理3.

vscode不能打开终端问题的解决办法

《vscode不能打开终端问题的解决办法》:本文主要介绍vscode不能打开终端问题的解决办法,问题的根源是Windows的安全软件限制了PowerShell的运行,而VSCode默认使用Powe... 遇到vscode不能打开终端问题,一直以为是安全软件限制问题,也没搜到解决方案,因为影响也不大,就没有管

Python运行中频繁出现Restart提示的解决办法

《Python运行中频繁出现Restart提示的解决办法》在编程的世界里,遇到各种奇怪的问题是家常便饭,但是,当你的Python程序在运行过程中频繁出现“Restart”提示时,这可能不仅仅是令人头疼... 目录问题描述代码示例无限循环递归调用内存泄漏解决方案1. 检查代码逻辑无限循环递归调用内存泄漏2.

Python中判断对象是否为空的方法

《Python中判断对象是否为空的方法》在Python开发中,判断对象是否为“空”是高频操作,但看似简单的需求却暗藏玄机,从None到空容器,从零值到自定义对象的“假值”状态,不同场景下的“空”需要精... 目录一、python中的“空”值体系二、精准判定方法对比三、常见误区解析四、进阶处理技巧五、性能优化

C#TextBox设置提示文本方式(SetHintText)

《C#TextBox设置提示文本方式(SetHintText)》:本文主要介绍C#TextBox设置提示文本方式(SetHintText),具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑... 目录C#TextBox设置提示文本效果展示核心代码总结C#TextBox设置提示文本效果展示核心代

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