Как отловить Cancel в CommonDialog?

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
d3drm
Астролог
Астролог
Аватара пользователя
 
Сообщения: 2873
Зарегистрирован: 29.05.2002 (Ср) 23:34
Откуда: МаСКвА

Как отловить Cancel в CommonDialog?

Сообщение d3drm » 12.01.2006 (Чт) 8:51

собсно нужно узнать, нажал ли пользователь ok или cancel в открывшемся диалоге...
ХЎ

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 12.01.2006 (Чт) 8:59

Собственно, .cancelerror=true...
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

ANDLL
Великий гастроном
Великий гастроном
Аватара пользователя
 
Сообщения: 3450
Зарегистрирован: 29.06.2003 (Вс) 18:55

Сообщение ANDLL » 12.01.2006 (Чт) 10:34

Или cancelerror=false и filename=""...
Гастрономия - наука о пище, о ее приготовлении, употреблении, переварении и испражнении.
Блог

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 12.01.2006 (Чт) 10:44

filename бывает "" и сама по себе, без cancel...
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

ANDLL
Великий гастроном
Великий гастроном
Аватара пользователя
 
Сообщения: 3450
Зарегистрирован: 29.06.2003 (Вс) 18:55

Сообщение ANDLL » 12.01.2006 (Чт) 11:15

Как?
Гастрономия - наука о пище, о ее приготовлении, употреблении, переварении и испражнении.
Блог

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 12.01.2006 (Чт) 11:34

То есть наоборот...
Если диалог уже вызывали ранее и нажали ok, а потом вызывали ещё раз и нажали отмену, то .filename останется с прошлого вызова, и процедура проверки filename сделает вывод, что снова нажали ok...
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

ANDLL
Великий гастроном
Великий гастроном
Аватара пользователя
 
Сообщения: 3450
Зарегистрирован: 29.06.2003 (Вс) 18:55

Сообщение ANDLL » 12.01.2006 (Чт) 11:36

Аааа. Да было такое...
Гастрономия - наука о пище, о ее приготовлении, употреблении, переварении и испражнении.
Блог

BV
Thinker
Thinker
Аватара пользователя
 
Сообщения: 3987
Зарегистрирован: 12.09.2004 (Вс) 0:55
Откуда: Молдавия, г. Кишинёв

Сообщение BV » 12.01.2006 (Чт) 16:47

Собственно, для GetOpenFileName подходит именно проверка имени файла :)
const char *out = "|*0>78-,+<|"; size_t cc = char_traits<char>::length(out);
for (size_t i=0;i<cc;i++){cout<<static_cast<char>((out[i]^89));}cout<<endl;

Kovu
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 924
Зарегистрирован: 29.04.2005 (Пт) 17:38

Сообщение Kovu » 12.01.2006 (Чт) 20:09

BV писал(а):Собственно, для GetOpenFileName подходит именно проверка имени файла :)

Зачем, если она возвращает ноль в случае Cancel'a :)
Если всё делать своими ручками, они скоро отвалятся !

d3drm
Астролог
Астролог
Аватара пользователя
 
Сообщения: 2873
Зарегистрирован: 29.05.2002 (Ср) 23:34
Откуда: МаСКвА

Сообщение d3drm » 12.01.2006 (Чт) 20:43

GSerg, ты тестил, что написал? Ввиду того, что код

cdFile.ShowOpen
Me.Caption = cdFile.CancelError

всегда показывает False есть 2 мысли - что либо у МЕНЯ так работает, либо ты не тестировал...

ведь не стал бы спрашивать, если б все так просто было...
ХЎ

VVitafresh
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1641
Зарегистрирован: 12.05.2005 (Чт) 14:44
Откуда: Херсон, UA

Сообщение VVitafresh » 12.01.2006 (Чт) 20:53

Флаг CancelError=False по умолчанию. Отлавливается нажатие Cancel через отлов error'a:
Код: Выделить всё

Private Sub cmdOpen_Click()
    On Error GoTo ErrorHandler
    dlgOpen.Filter = "Log Files (*.log)|*.log|All Files (*.*)|*.*"
    dlgOpen.Flags = cdlOFNReadOnly + cdlOFNFileMustExist
    dlgOpen.CancelError = True
    dlgOpen.ShowOpen
    sOpenFile = dlgOpen.FileName
   
    Exit Sub
ErrorHandler:
    If Err.Number = 32755 Then
        'MsgBox "You pressed Cancel!", vbInformation, "Cancel"
        sOpenFile = ""
        Exit Sub
    End If
End Sub


BV
Thinker
Thinker
Аватара пользователя
 
Сообщения: 3987
Зарегистрирован: 12.09.2004 (Вс) 0:55
Откуда: Молдавия, г. Кишинёв

Сообщение BV » 12.01.2006 (Чт) 20:58

Kovu писал(а):
BV писал(а):Собственно, для GetOpenFileName подходит именно проверка имени файла :)

Зачем, если она возвращает ноль в случае Cancel'a :)


Я сказал подходит, а не является единственным.

d3drm писал(а):cdFile.ShowOpen
Me.Caption = cdFile.CancelError

всегда показывает False есть 2 мысли - что либо у МЕНЯ так работает, либо ты не тестировал...

ведь не стал бы спрашивать, если б все так просто было...


:shock:

2467 сообщений, более 3 лет на форуме...

CancelError - это свойство, которое, если равно истине, при нажатии Cancel разрешит ComDlg32.ocx создать ошибку. Далее On Error...
const char *out = "|*0>78-,+<|"; size_t cc = char_traits<char>::length(out);
for (size_t i=0;i<cc;i++){cout<<static_cast<char>((out[i]^89));}cout<<endl;

d3drm
Астролог
Астролог
Аватара пользователя
 
Сообщения: 2873
Зарегистрирован: 29.05.2002 (Ср) 23:34
Откуда: МаСКвА

Сообщение d3drm » 13.01.2006 (Пт) 5:59

блин, все понял. иду пить йад. не кричите на меня.
ХЎ


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: Yandex-бот и гости: 193

    TopList