Используйте «выход для» внутри функции - PullRequest
0 голосов
/ 03 октября 2019

Я думаю, что это может быть очень глупый вопрос, я был бы очень благодарен, если бы кто-то мог объяснить мне это. Так что в моей программе у меня есть 2 цикла for, которые будут иметь одинаковый блок сообщений, спрашивающий пользователя, действительно ли он хочет остановить цикл. Поэтому я попытался создать подпрограмму для использования в обоих циклах for, поэтому мне не нужно писать то же самое в обоих циклах for, но с начала (For i = rect.X To endPointX - 1) и конца (Next) цикла for не существует, я не могу написать "выход для" внутри подпрограммы. Есть ли способ для этого? Извините, это немного грязно, чтобы понять.

Один из циклов, который имеет msgbox

For j = endpointY - 1 To rect.Y Step -1
    If escPress = True Then
        response = MsgBox(Msg, Style, Title)
        If response = vbYes Then
            Exit For

        ElseIf response = vbNo Then
            escPress = False

        End If
    End If
    If bmp.GetPixel(i, j) = cor Then
        crossIn(PictureBox1, n, pemSize, i, j)
        tempI = i

        Exit For
    End If
 Next

Создана функция:

Public Sub escKeyPress(escpress As Boolean, response As Object, msg As Object, style As Object, title As Object)
    If escpress = True Then
        response = MsgBox(msg, style, title)
        If response = vbYes Then
            Exit For

        ElseIf response = vbNo Then
            escpress = False

        End If
    End If
 End Sub

Спасибо завнимание

1 Ответ

2 голосов
/ 03 октября 2019

Вы шли по правильному пути, за исключением того, что вы можете достичь этого путем , возвращая указание от вашего Function, что результат был vbYes:

Public Function escKeyPress(escpress As Boolean, response As Object, msg As Object, style As Object, title As Object) As Boolean
    escKeyPress = False

    If escpress = True Then
        response = MsgBox(msg, style, title)
        If response = vbYes Then
            escKeyPress = True
        End If
    End If
 End Sub

ЗапускescKeyPress = False или escKeyPress = True устанавливает результат работы функции escKeyPress.

В вашем коде вызова в цикле for:

For j = endpointY - 1 To rect.Y Step -1
    If escKeyPress(...) Then ' Left these params blank as I don't know what they are
        Exit For
    End If
    If bmp.GetPixel(i, j) = cor Then
        crossIn(PictureBox1, n, pemSize, i, j)
        tempI = i
        Exit For
    End If
Next

Это не проверено, поскольку яне на машине с атм VB, но должен дать вам идею.

...