我有这个代码我正在使用goto选项 我总是得到标签nextrecord没有定义..我该怎么办?我错过了什么吗?你能告诉我我该怎么办:)提前谢谢你! 这就是我正在编写的代码..
Private Sub Timer_Tick(sender As System.Object, e As System.EventArgs) Handles Timer.Tick
Try
Timer.Interval = 5000
sendSched()
If send = True Then
GoTo NEXTRECORD
End If
Catch
End Try
End Sub
Private Sub sendSched()
subTable.Rows.Clear()
subTable = selectSubscriber(content.mt, content.clID)
subCount = subTable.Rows.Count()
If content.timeSend = DateTime.Now.ToString("hh:mm") Then
Timer.Enabled = False
UpdateListBoxRec2("Sending content: " & content.contentSend & " to :")
For Each subRow As DataRow In subTable.Rows
content.moSend = subRow("sim_mo")
UpdateListBoxRec2(content.moSend)
MsgBox(content.contentSend)
Next
send = True
Else
Timer.Enabled = True
Timer.Interval = 5000
End If
End Sub
Private Sub start_check_CheckedChanged(sender As System.Object, e As System.EventArgs) Handles start_check.CheckedChanged
For Each contentRow As DataRow In contentTable.Rows
content.mt = contentRow("cnt_mt")
content.clID = contentRow("cnt_cl_id")
content.contentSend = contentRow("cnt_content")
content.id = contentRow("cnt_id")
content.timeSend = contentRow("cnt_time_to_send")
UpdateListBoxRec("Content to send at: " & content.timeSend)
Timer.Enabled = True
Timer.Interval = 0
NEXTRECORD:
Next
End Sub
答案 0 :(得分:1)
我错过了什么吗?
我是这么认为的。 A)你不能在一个不同的程序中转移一个点,而B)在另一个循环中GOTO一个位置是一个坏主意(如果它甚至是合法的)。 C)出现您正在使用计时器作为循环控制装置和D)NEXTRECORD标签的位置似乎表明您正在尝试GOTO / CALL /跳转到事件内的循环过程
将sendSched()更改为返回True / False的函数,具体取决于是否发送(非常类似于Douglas的回答)。
然后gut start_check_CheckedChanged到其中包含该代码的新程序,例如:
Private Sub AddContent
For Each contentRow As DataRow In contentTable.Rows
...
...
Next
End Sub
现在,您可以从事件过程调用它和/或根据需要从Timer_Tick事件中调用它,并消除GOTO和发送全局/模块标志变量。
看起来像您可能一直在尝试使用GOTO来避免在start_check_CheckedChanged
中重新处理事情(即使每次使用{{1}处理某事时都会清除某些内容})。首先,当您可以检查事件参数(subTables.Rows.Clear
和sender
)时,您正在迭代事件中的所有行,以准确了解要处理的事物(假设它是合法事件并且不是你在代码中解雇的东西。)
您可能还要检查.timesend以确定是否已发送该数据包(或其他任何数据包)。类似的东西:
e
或者,由于看起来For Each contentRow As DataRow In contentTable.Rows
If content.timesend <> String.Empty Then ' or <> DateTime.Now.MinValue.ToString
...
' process or send it
...
End If
Next
是您设计的内容,您可以在发送每个项目后添加一个content
标记,并使用Sent
跳过已发送的标记
HTH
答案 1 :(得分:0)
这应该完全改写。你在这里尝试做什么还不是很清楚,但试试这个:
If Not send Then
For Each contentRow As DataRow In contentTable.Rows
content.mt = contentRow("cnt_mt")
content.clID = contentRow("cnt_cl_id")
content.contentSend = contentRow("cnt_content")
content.id = contentRow("cnt_id")
content.timeSend = contentRow("cnt_time_to_send")
UpdateListBoxRec("Content to send at: " & content.timeSend)
Timer.Enabled = True
Timer.Interval = 0
Next
End If