这种SafeArray也无法从根本上改变数组类型,这个是VB解析初始类型时定死了。可以通过改变定义一个空数组,让SafeArray指向原数组,来变相转换类型。 如果这种觉得太复杂,可以参考这种 比如你原先定义了 dim a(0) as long 你想转换成Byte型 可以 dim b(3) as byte 然后用Copymemory把 a的数据拷贝到b,这个就转换成了byte 考虑到某种情况下,直接拷出来的数据,修改好后,并不能改变原数组的数据 所以需用要Copymemory把 b的数据拷贝回a 这种方法效率较低,建议是采用SafeArray的方法
Private Type bytetype e(3) As Byte End Type Private Type longtype e As Long End Type Private Sub Form_Load() Dim a() As bytetype Dim b() As longtype ReDim a(0) ReDim b(0) b(0).e = &H11223344 a = b End Sub 这种方法可以省掉Copymemory,通过结构来避开VB类型检测,这样也可以达到转换类型。 不过这个方法内部也是和copymemory差不多的原理,只是可以不用调用API函数
我的题目是这样的: 双色球模拟,建立控件数组Text1(0)~text1(6)储存号码, 利用抽牌法建立随机数据 利用冒泡排序进行从小到大排序 Text1(0)~text1(5) Dim a(0 To 32) As Integer 运行后发现文本框数组没有按从小到大顺序排序,哪里错了? ( 下标下届改为1就不会出现这样的问题。) 在【格式过程中】把For 语句改为For i=0 to n-1,前5个数据正常。改为For i=0 to n顺序就乱了。
回复 初音✨七奈 : 再问大佬,①如果把控件数组作为传递对象,形参为什么不能写成数组形式,只能写个数组名(如:Private sub 排序(Text1() as object)错误)②Text1为什么不定义为TextBox (如:Private sub 排序(Text1 as Textbox)错误),是不是因为错误原因一样,形参是一个变量,而不是数组?