调试程序时,一个对象的属性(Boolean类型)mo.act
vb吧
全部回复
仅看楼主
level 9
falylee 楼主
调试程序时,一个对象的属性(Boolean类型)mo.active是true,然后表达式 mo.active = true 值居然是false,给我整蒙了,求大佬解惑 @初音✨七奈 @总裁大人👻 @jy497759649
2024年10月04日 04点10分 1
level 13
没看出问题,没有代码无法知道,按理这么简单的代码不需要监视,F8一行一行本地窗口也可以看出来
2024年10月04日 10点10分 2
代码在楼下,这个应该和代码没有关系吧,某状态一个变量的值是true,而表达式 变量=true 的值居然是false,我是彻底崩溃了。
2024年10月05日 12点10分
level 8
是不是语句或者对象没有激活,没有代码无法知道
2024年10月04日 13点10分 3
代码在楼下,这个应该和代码没有关系吧,某状态一个变量的值是true,而表达式 变量=true 的值居然是false,我是彻底崩溃了。
2024年10月05日 12点10分
level 9
falylee 楼主
代码。
这个应该和代码没有关系吧,某状态一个变量的值是true,而表达式 变量=true 的值居然是false,我是彻底崩溃了。
2024年10月05日 12点10分 4
原来是写的 mo.active=true ,感觉不对劲结果很奇怪,马上调试发现这个问题,崩溃了,不知道原因只好先改成 if mo.active了,按理说不应该一样的吗
2024年10月05日 12点10分
就这些代码肯定看不出来什么问题,看你引用的这个对象,应该也不会有它的源代码,所以具体原因就不得而知了;不过我想说,任何时候在条件中写=True都是多余的,不写就对了,平时倒也没啥,这里来了个离谱的直接告诉你写上是错的,就是为了让你记住,不要画蛇添足[滑稽]
2024年10月05日 12点10分
@初音✨七奈 确实离谱,这个原来是写在vbnet里的,引用的同一个对象,没有这个问题,猜测还是vb6内部的问题,以后长记性了不写=了
2024年10月05日 16点10分
@falylee 有些语言的True=1,False=0。VB是True=-1,False=0,所以有些属性是boolean型的,当它为True实际值是1,VB这样active=true当然为False,而if active then 不加=True,是active只要值是非0就成立
2024年10月06日 01点10分
level 13
@klimaa @falylee
这样操作过后,就对boolean变量就有深入了解
2024年10月08日 04点10分 5
当然CInt和CLng直接将boolean变量转成输出也是一样的
2024年10月08日 04点10分
level 13
已经是boolean的,再CBool后VB没有转换,故而Boolean类型变量的值仍保留不变
2024年10月08日 05点10分 6
good job! 另外你这个等宽字体能不能分享下,我看习惯了雅黑可惜不是等宽
2024年10月08日 07点10分
我也刚测试完,确实CBool不能改变Boolean类型变量的值。
2024年10月08日 07点10分
@falylee 系统自带的Consolas
2024年10月08日 08点10分
我现在都用新宋体,印象里以前的系统里,VB用Consolas之类的英文字体显示汉字是乱码的。刚才用Win11试试,没问题。也可以试试menlo,我觉得不错。
2024年10月08日 09点10分
吧务
level 12
试试 True = mo.Active
同样,试试前面众人给出的方法
Dim activeValue As Integer
activeValue = mo.Active
Debug.Print activeValue
看看这个 activeValue 是什么
2024年10月08日 17点10分 7
这样的话 activeValue 实际就是cint(mo.active),也就是1。 实测也是这个结果
2024年10月11日 01点10分
@falylee 所以说 VB6 中更加推荐用 IF EXPRESSION 这种表示方式,而不是 IF EXPRESSION = True/False
2024年10月12日 02点10分
level 13
@sunruisunrui
我基本都是用这种的
If 表达式 Then
不过,以下这种情况也还是用得多的
If bInit = False Then
'初始化数据(包括变量各值)
bInit = True 'bInit设为True,后面再执行这个If就不会再执行初始化
end if
'bInit=True就直接执行后面的代码
如果是为了兼容C++写的接口比如(If mo.active then )可以省掉=True。主要是语言不同,C、C++设计时True为1,False为0,所以bool用一个字节就可以。而VB6可能考虑其他原因,将True为-1,所以需要两个字节。语言设计者的目的不同,反正只要知道了这点区别,写代码时注意点,想怎么写都是可以的
2024年10月12日 04点10分 10
1