[玻璃鱼V]“控件数组元素不存在”的问题

teita731 2008-01-29 11:41:56
我在Form_Load()中动态添加了ComboBox数组控件分别为Combo(1)\Combo(2)\Combo(3),调试时运行没问题。可是在Combo_chang(Index as integer)中需要读取判断Combo(3).Text的时候就报错:控件数组元素不存在

改怎么办呢?

代码如下:

Private Sub Form_Load() ’动态生成ComboBox数组控件,其他略

Dim intTempYear() As Integer
Dim intTempMonth() As Integer
Dim IsAt As Integer

Dim TmpFileType As FileType
Dim TmpLblName()

For i = 1 To 2

Load Combo(i)
Combo(i).Move FormLeft + (i - 1) * ComboWidth, FormTop, ComboWidth
Combo(i).Visible = True

Next i

reco.Open "Select * from " & RecordName, conn, 1, 1

ReDim intTempYear(1)
intTempYear(0) = reco("Year")

Combo(1).AddItem intTempYear(0)
Combo(1).Text = intTempYear(0)

reco.movenext

Do Until reco.EOF

For i = 0 To UBound(intTempYear)

If reco("Year") <> intTempYear(i) Then
IsAt = IsAt + 1
End If

Next i

If IsAt >= UBound(intTempYear) + 1 Then
Combo(1).AddItem reco("Year")
ReDim intTempYear(UBound(intTempYear) + 2)
intTempYear(UBound(intTempYear) + 1) = reco("Year")
IsAt = 0
Else
IsAt = 0
End If

reco.movenext

Loop

reco.movefirst

ReDim intTempMonth(1)
intTempMonth(0) = reco("Month")

Combo(2).AddItem intTempMonth(0)
Combo(2).Text = intTempMonth(0)

reco.movenext

Do Until reco.EOF

For i = 0 To UBound(intTempMonth)

If reco("Month") <> intTempMonth(i) Then
IsAt = IsAt + 1
End If

Next i

If IsAt >= UBound(intTempMonth) + 1 Then
Combo(2).AddItem reco("Month")
ReDim intTempMonth(UBound(intTempMonth) + 2)
intTempMonth(UBound(intTempMonth) + 1) = reco("Month")
IsAt = 0
Else
IsAt = 0
End If

reco.movenext

Loop

reco.Close

Load Combo(3)
Combo(3).Move Me.Width \ 15 - FormLeft - ComboWidth, FormTop, ComboWidth
Combo(3).Visible = True

reco.Open "Select * from UserSet where UserName='" & RecordName & "'", conn, 1, 1

If Not reco.EOF Then

For i = 1 To 9

If reco("LblName" & i) <> "" Then
intLblNameNum = intLblNameNum + 1
End If

Next i

ReDim strOrder(intLblNameNum)

Combo(3).AddItem "日期"
For i = 1 To 9
If reco("LblName" & i) <> "" Then
Combo(3).AddItem reco("LblName" & i)
strOrder(i) = reco("LblName" & i)
End If
Next i
Combo(3).AddItem "总计"
Combo(3).Text = "日期"

Else

MsgBox "用户名错误!"
End

End If
End Sub

Private Sub ShowNum()

Select Case Combo(3).Text
Case "日期"
strByOrder = "Day"
Case strOrder(0)
strByOrder = "Num1"
Case strOrder(1)
strByOrder = "Num2"
Case strOrder(2)
strByOrder = "Num3"
Case strOrder(3)
strByOrder = "Num4"
Case strOrder(4)
strByOrder = "Num5"
Case strOrder(5)
strByOrder = "Num6"
Case strOrder(6)
strByOrder = "Num7"
Case strOrder(7)
strByOrder = "Num8"
Case strOrder(8)
strByOrder = "Num9"
Case "总计"
strByOrder = "NumAll"
End Select

If reco.state = 1 Then reco.Close
reco.Open "Select * from " & RecordName & " where Year=" & Combo(1).Text & " and Month=" & Combo(2).Text & " order by " & strByOrder, conn, 1, 1

If Not reco.BOF Or reco.EOF Then

Do Until reco.EOF

LblNumShow(1).Caption = LblNumShow(1).Caption & reco("Day") & "日" & Chr(10) & Chr(13)

For i = 1 To intLblNameNum

LblNumShow(i + 1).Caption = LblNumShow(i + 1).Caption & reco("Num" & i) & Chr(10) & Chr(13)

Next i

LblNumShow(intLblNameNum + 2).Caption = LblNumShow(intLblNameNum + 2).Caption & reco("NumAll") & Chr(10) & Chr(13)

reco.movenext

Loop

Else

MsgBox "无记录!"

End If

reco.Close

End Sub

Private Sub Combo_Change(Index As Integer)

Call ShowNum

End Sub

其实不单控件数组元素‘3’不存在,其实Combo(1)和Combo(2)一样无法得到取值。
...全文
515 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
东方之珠 2008-01-29
  • 打赏
  • 举报
回复
FileType 是什么类型?程序无法运行
teita731 2008-01-29
  • 打赏
  • 举报
回复
的确如zzyong00所说,没怎么用ComboBox控件,不清楚原来ComboBox控件的Change事件是通过改变ComboBox控件的Text属性来改变的。其实我想要的效果应该用ComboBox控件的Click事件来触发……

再次谢谢zzyong00的解答,这是我在CSDN的第一个问题,结帖的说~
zzyong00 2008-01-29
  • 打赏
  • 举报
回复
为什么会在初始化未完成就触发了Combo_Change事件呢?
-------------------------
你在加载 combo(1)后,(如下代码)
For   i   =   1   To   2  
Load Combo(i)
Combo(i).Move FormLeft + (i - 1) * ComboWidth, FormTop, ComboWidth
Combo(i).Visible = True
Next i
。。。
Combo(1).AddItem intTempYear(0)
Combo(1).Text = intTempYear(0)

就触发了change事件!此时,combo(3)还没有被 load
而触发了change事件,就执行ShowNum子程序,
Private   Sub   ShowNum()  
Select Case Combo(3).Text '当有出问题了,还没有combo(3)呢


程序应在人的大脑里按流程先执行一下,就不会出现这样的逻辑问题了
teita731 2008-01-29
  • 打赏
  • 举报
回复
回2楼,FileType是自定义类型。

3楼的建议不错,我回去试试看。不过还是有个小小的疑问:为什么会在初始化未完成就触发了Combo_Change事件呢?

先谢过热心的两位朋友~
Tiger_Zhao 2008-01-29
  • 打赏
  • 举报
回复
原因是在初始化未完成时就触发了Combo_Change事件。
设置一个“已初始化”的模块变量,在Form_Load结束时设为True,Combo_Change中只要该标记为True时才调用ShowNum()。

1,453

社区成员

发帖
与我相关
我的任务
社区描述
VB 控件
社区管理员
  • 控件
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧