воскресенье, 14 января 2007 г.

[ VB6 ] InputBox - был ли нажат Cancel или просто ввели ""?

Не многие знают, как правильно определить был ли нажат Cancel в диалоге, который отображается по InputBox(). Вы думаете код

str=InputBox("")
if str="" then MsgBox "Canceled"

Правильный? Ничего подобного. Это видно хотя бы из того, что если пользователь не введет ничего, то функция то же будет думать, что нажали отмену. Хотя на самом деле пользователь просто нажал OK, ничего не введя.
Как исправить? Ну можно, к примеру так:

str=InputBox("")
if StrPtr(str)=0 then MsgBox "Canceled"

Теперь наш код и правда будет различать случаи нажатого Cancel и просто пустой строки. Потому что, при cancel InputBox вовзращает C-шный NULL, а если пользователь ничего не ввел - то указатель на пустую строку, "". В VB разлисить NULL и "" можно с помощью функции StrPtr

1 комментарий:

Анонимный комментирует...

Спасибо.
Добавлю: не только Cancel, но и кнопка закрытия диалога (крестик) тоже теперь не перепутаются с ОК