Как выйти из цикла кнопкой отмены в поле ввода - PullRequest
0 голосов
/ 11 июня 2010

Следующий скрипт VB проверяет действительный IP с помощью функции теста

, если мы получаем ОК от функции теста, то мы отрываемся от цикла ValidIP = OK. Если не inputBox, задаем вопрос, пока ValidIP = OK

Но иногда я хочу выйти из цикла с помощью кнопки отмены

Как разорвать цикл с помощью кнопки отмены (чтобы установить ValidIP как OK)

Do Until ValidIP=OK
    IPrange=InputBox("Enter IP address range",,"172.17.202.1-10,192.9.200.1-100")
    Test IPrange, strPattern 
Loop

Ответы [ 3 ]

2 голосов
/ 11 июня 2010

Поместите что-то вроде приведенного ниже кода перед строкой Test ... (код, написанный из старых воспоминаний о том, как работает vbscript):

If Len(IPrange) = 0 Then
    Exit Do
End 

Когда пользователь нажимает Cancel, InputBox возвращаетСтрока 0 длины.

1 голос
/ 04 сентября 2014

Получил ответ здесь .Хотя он доступен для поиска через Google, он не на обычном сайте.Поэтому я публикую ответ здесь, чтобы он был доступен для других.

Для этого конкретного вопроса принятый в настоящее время ответ будет работать просто отлично.


Возникла проблемас общим подходом, который выглядит как if IPrange = "" then ...

Если вы нажимаете OK, оставляя поле ввода пустым, или если вы нажимаете cancel, или вы нажимаете кнопку закрытия, все 3 обрабатываются одинаковопо указанному выше коду.

Этот код, однако, решает эту ситуацию:

IPrange=InputBox("Enter IP address range",,"172.17.202.1-10,192.9.200.1-100")
If TypeName(IPrange) = "Empty" Then
    MsgBox "User has cancelled"
    Exit Do
End If
1 голос
/ 11 июня 2010

Я не знаю VB скрипт, но я бы решил эту проблему следующим образом.

Ваша функция IP by Test работала бы в отдельном потоке, поток, в котором работает графический интерфейс, должен иметь возможность связываться с другим вашим потоком и устанавливать переменную.

Для удобства чтения я бы ввел новую переменную, скажем, AbortedByUser, эта переменная может быть установлена ​​вашим другим потоком (обработчиком событий или чем-то в этом роде, чтобы не делать ее публичной ...)

Тогда ваш код будет выглядеть примерно так:

Do Until ValidIP=OK AND !AbortedByUser
   IPrange=InputBox("Enter IP address range",,"172.17.202.1-10,192.9.200.1-100")
   Test IPrange, strPattern
Loop

Обратите внимание, что AbortedByUser должен быть установлен в false при запуске вашей функции.

Поскольку я не знаю VB-скрипт, я не знаю, как написать это, а НЕ как следует ..; -)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...