2015-10-29 2 views
-1

У меня есть этот код, где я хочу, чтобы цикл for повторялся для каждой строки. Но этот код не выполняет итерацию, если условие if ложно.
Я попытался «продолжить» в другой части. Но это не сработало. Даже если я помещу msgbox в другой части и нажимаю msg box каждый раз, когда он отображается, цикл продолжается. но это нецелесообразно, так как у меня есть 1000 строк для проверки.Для цикла с условием If - Итерация, если условие не выполнено

Public Function SMS() 
    CustomerTableAdapter.Fill(MyHotelManagementSystemDataSet63.Customer) 
    For i = 0 To MyHotelManagementSystemDataSet63.Customer.Rows.Count - 1 
     If MyHotelManagementSystemDataSet63.Customer(i).DOB.Day = Date.Now.Day AndAlso _ 
      MyHotelManagementSystemDataSet63.Customer(i).DOB.Date.Month = Date.Now.Month Then 
      Dim SerialPort As New System.IO.Ports.SerialPort() 
      If SerialPort.IsOpen Then 
       SerialPort.Close() 
      End If 
      SerialPort.PortName = "COM29" 
      SerialPort.BaudRate = 9600 
      SerialPort.Parity = Parity.None 
      SerialPort.StopBits = StopBits.One 
      SerialPort.DataBits = 8 
      SerialPort.Handshake = Handshake.RequestToSend 
      SerialPort.DtrEnable = True 
      SerialPort.RtsEnable = True 
      SerialPort.NewLine = vbCrLf 
      Dim message As String 
      Dim nm = MyHotelManagementSystemDataSet63.Customer(i).Name 
      Dim tp = MyHotelManagementSystemDataSet63.Customer(i).Telephone 
      message = "Dear " + nm + " ***)" 
      SerialPort.Open() 
      If SerialPort.IsOpen() Then 
       SerialPort.Write("AT" & vbCrLf) 
       SerialPort.Write("AT+CMGF=1" & vbCrLf) 
       SerialPort.Write("AT+CMGS=" & Chr(34) & tp & Chr(34) & vbCrLf) 
       SerialPort.Write(message & Chr(26)) 
       SerialPort.Close() 
      Else 
       MsgBox("Port not available") 
      End If 
     Else 

     End If 
    Next 
    Return True 
End Function 

Просьба помочь мне сделать это для цикла продолжением без какого-либо взаимодействия с пользователем.

+2

Ваш вопрос непонятен. Что вы подразумеваете под словом «не вмешиваться»? Зачем? – DarkKnight

+0

На самом деле цикл автоматически включается, если 'i> = 2'. Вам не нужно явно вызывать 'Continue'. –

+0

Цикл повторяется с '0 до CustomerDataSet.customer.Rows.count - 1', но из-за вашего' If' только значения '0' и' 1' «Сделайте что-нибудь». – Enigmativity

ответ

0

Вы проверили, если Rows.Count установлен и не 0

Если это не так

For i = 0 To CustomerDataSet.customer.Rows.count - 1 
    if i < 2 Then 
    'Do something 
    Else 
    Continue For 
    End If 
Next 
+0

Счет Veenman Row не установлен. Как я упоминал ранее, если я устанавливаю поле msg в другой части и нажимаю на него каждый раз, когда он появляется, цикл продолжается. Но я хочу, чтобы у ti было что-то другое, что прямое выполнение следующей строки, что должно было бы для раздела else? пожалуйста, помогите – A1990

+0

@ A1990 Edit: Как только код войдет в блок Else, он перейдет к следующей итерации цикла For (например, если I = 2, он перейдет к 4-й итерации (i = 3 then)) Я думаю, что это это то, что вы ищете – DieVeenman

+1

Выполнение будет продолжаться до следующей строки без кода в инструкции else – Fabio

0

Используйте Exit For, если вы не хотите итерацию строки после возврата условия false

For i = 0 To CustomerDataSet.customer.Rows.count - 1 
    If condition = false Then Exit For 
    'Do something for rows which condition = true 
Next 

Используйте Continue For, если вы хотите перебирать на следующую строку, не выполняя свой DoSomething код

For i = 0 To CustomerDataSet.customer.Rows.count - 1 
    If condition = false Then Continue For 
    'Do something for rows which condition = true 
Next 
Смежные вопросы