CommonDialog - отмена

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
Adolf
Новичок
Новичок
 
Сообщения: 44
Зарегистрирован: 30.01.2005 (Вс) 11:01
Откуда: Ленинградская область, город Гатчина

CommonDialog - отмена

Сообщение Adolf » 16.03.2005 (Ср) 19:51

Вот я тут с помощью CommonDialog сохраняю файлы, делаю распечатки, меняю шрифт, но существует одна проблема, когда запустишь окно и вдруг передумаешь сохранять файл или распечатовать и так далее - жмешь "отмена" или "крест (закрыть окно)", то выскакивает одна и таже ошибка, "Run-time error '32755'" - как от нее избавится, какой код нужно написать или это ошибка из-за чего-то другого?

Alexander N. Samarin
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 397
Зарегистрирован: 05.03.2005 (Сб) 20:59
Откуда: Интернат 18 (СУНЦ МГУ), комната 214А, кровать посередине

Сообщение Alexander N. Samarin » 16.03.2005 (Ср) 20:02

Надо это отслеживать, например
CommonDialog1.CancelError = True
On Error GoTo ...

Adolf
Новичок
Новичок
 
Сообщения: 44
Зарегистрирован: 30.01.2005 (Вс) 11:01
Откуда: Ленинградская область, город Гатчина

Сообщение Adolf » 16.03.2005 (Ср) 20:55

On Error GoTo...

А куда дальше? На примере полного кода напиши пожалуйста, так будет легче понять.

dimix
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 174
Зарегистрирован: 08.02.2005 (Вт) 22:47

Сообщение dimix » 16.03.2005 (Ср) 21:24

А куда угодно :)

Например, в начале процедуры пишешь:
On Error Goto Oshibka

а в конце:

Oshibka:
MsgBox("Отловили ошибку!")

вот туда оно и придет...

dimix
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 174
Зарегистрирован: 08.02.2005 (Вт) 22:47

Сообщение dimix » 16.03.2005 (Ср) 21:27

А еще, наверное, можно:
On Error Resume Next

Ruslan Demidow
Мужчина!
Мужчина!
Аватара пользователя
 
Сообщения: 987
Зарегистрирован: 25.03.2004 (Чт) 13:39
Откуда: N.Novgorod

Сообщение Ruslan Demidow » 16.03.2005 (Ср) 22:07

dimix писал(а):А еще, наверное, можно:
On Error Resume Next

Не можно, потому что после выбора файла у тебя в процедуре могут быть указаны действия делающие что-либо с выбранным файлом.
А так как файл на самом деле не выбрали - то ты напорешся на другую ошибку.
Это Ж-ж-ж-ж неспроста (с) Винни-Пух

dimix
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 174
Зарегистрирован: 08.02.2005 (Вт) 22:47

Сообщение dimix » 16.03.2005 (Ср) 22:10

Напорюсь. И таким же макаром перейду дальше :)
А вообще, согласен. Просто подзабыл, с чего начинали :)

Adolf
Новичок
Новичок
 
Сообщения: 44
Зарегистрирован: 30.01.2005 (Вс) 11:01
Откуда: Ленинградская область, город Гатчина

Сообщение Adolf » 16.03.2005 (Ср) 23:07

Спасибо за помощь.

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 17.03.2005 (Чт) 8:11

Ruslan Demidow писал(а):
dimix писал(а):А еще, наверное, можно:
On Error Resume Next

Не можно, потому что после выбора файла у тебя в процедуре могут быть указаны действия делающие что-либо с выбранным файлом.
А так как файл на самом деле не выбрали - то ты напорешся на другую ошибку.

Можно. А чтобы убедится, что ошибка именно та, что соответствует кнопке отмены, проверяется Err.Number.
Lasciate ogni speranza, voi ch'entrate.

dimix
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 174
Зарегистрирован: 08.02.2005 (Вт) 22:47

Сообщение dimix » 17.03.2005 (Чт) 12:17

Ну вот, оказывается можно... А я уже почти признался, что был не прав :)

Ruslan Demidow
Мужчина!
Мужчина!
Аватара пользователя
 
Сообщения: 987
Зарегистрирован: 25.03.2004 (Чт) 13:39
Откуда: N.Novgorod

Сообщение Ruslan Demidow » 17.03.2005 (Чт) 15:02

alibek
А сколько же тогда надо написать строк проверки ошибки, чтобы не напороться на них?
Лично я стараюсь избегать On Error Resume Next - ещё та козявка!

dimix
А вот такой я... провокатор. :lol:
Это Ж-ж-ж-ж неспроста (с) Винни-Пух

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 17.03.2005 (Чт) 15:27

Всего три строки, на 0 (успешно), на номер ошибки Cancel и на все остальные. Делается элементарно Select Case.
Lasciate ogni speranza, voi ch'entrate.

Ruslan Demidow
Мужчина!
Мужчина!
Аватара пользователя
 
Сообщения: 987
Зарегистрирован: 25.03.2004 (Чт) 13:39
Откуда: N.Novgorod

Сообщение Ruslan Demidow » 17.03.2005 (Чт) 19:28

alibek
Сдаюсь. Ты прав. ;)
Это Ж-ж-ж-ж неспроста (с) Винни-Пух

Dex
Постоялец
Постоялец
 
Сообщения: 346
Зарегистрирован: 09.08.2004 (Пн) 16:11

Сообщение Dex » 18.03.2005 (Пт) 19:29

А разве
Код: Выделить всё
If Len(CommonDialog.FileName) = 0 Then Exit Sub
не катит? :?

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 18.03.2005 (Пт) 20:18

Не катит.
Если до этого файл выбирался, то после нажатия на кнопку "Отмена" в буфере будет предыдущий выбранный файл.
Lasciate ogni speranza, voi ch'entrate.

Adolf
Новичок
Новичок
 
Сообщения: 44
Зарегистрирован: 30.01.2005 (Вс) 11:01
Откуда: Ленинградская область, город Гатчина

Сообщение Adolf » 19.03.2005 (Сб) 11:38

Кстати, а как сделать отмену последнего действия с текстом, как например в том же WordPad-e?

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

Сообщение GSerg » 19.03.2005 (Сб) 11:57

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

Adolf
Новичок
Новичок
 
Сообщения: 44
Зарегистрирован: 30.01.2005 (Вс) 11:01
Откуда: Ленинградская область, город Гатчина

Сообщение Adolf » 19.03.2005 (Сб) 12:11

Как это сделать? На примере покажи, пожалуйста.

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

Сообщение GSerg » 19.03.2005 (Сб) 15:01

А почему не хочется самому найти?

Код: Выделить всё
Private Declare Function SendMessage Lib "user32.dll" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByRef lParam As Any) As Long

Private Const EM_UNDO As Long = &HC7

...
sendmessage text1.hwnd, EM_UNDO,0, byval 0&
...
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

iwand
Начинающий
Начинающий
 
Сообщения: 10
Зарегистрирован: 23.11.2004 (Вт) 12:51

Сообщение iwand » 13.05.2005 (Пт) 0:46

Несколько запоздалое сообщение, но все же... Я сам подобный вопрос задавал, но сам и разобрался... Код на кнопку "Отмена" для диалоговых окон CommonDialog:

Private Sub ... название процедуры
On Error GoTo Terminate
CommonDialog1.CancelError=True
CommonDialog1.ShowPrinter
Terminate:
If Err.Number=32755 Then
Exit Sub
End If
... какой-то оператор
End Sub

Вот, может, кому и прогодится, у меня все работает

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

Сообщение GSerg » 13.05.2005 (Пт) 11:45

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

Alex_2005
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 242
Зарегистрирован: 07.04.2005 (Чт) 17:09
Откуда: Germany, Baden-Wurttemberg, Bietigheim-Bissingen

Сообщение Alex_2005 » 13.05.2005 (Пт) 15:12

честно говоря всё можно значительно упростить, а именно перед использованием CommonDialog вставить строку
CommonDialog.CancelError = False
Guten Morgen! А если не Guten, то тогда это и не Morgen...

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 13.05.2005 (Пт) 20:38

Alex_2005, ты чужие посты-то прочитал, прежде чем свой постить? :evil:
Изображение

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 14.05.2005 (Сб) 7:57

Нет, зачем читать? Чукча не читатель, чукча писатель :)
Lasciate ogni speranza, voi ch'entrate.

NIC
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 175
Зарегистрирован: 26.04.2005 (Вт) 4:50

Сообщение NIC » 15.05.2005 (Вс) 5:56

dimix писал(а):А еще, наверное, можно:
On Error Resume Next

А как быть с переменными которые там играют? :?

Alex_2005
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 242
Зарегистрирован: 07.04.2005 (Чт) 17:09
Откуда: Germany, Baden-Wurttemberg, Bietigheim-Bissingen

Сообщение Alex_2005 » 17.05.2005 (Вт) 9:26

tyomitch писал(а):Alex_2005, ты чужие посты-то прочитал, прежде чем свой постить? :evil:


2 tyomitch
да, если тебя это интересует то читал, поэтому и решил написать, так как iwand своим ответом только запутал. Так что не злись зря. :wink:
Guten Morgen! А если не Guten, то тогда это и не Morgen...

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 17.05.2005 (Вт) 18:55

Alex_2005 писал(а):да, если тебя это интересует то читал, поэтому и решил написать, так как iwand своим ответом только запутал. Так что не злись зря. :wink:

В самом первом ответе в топике уже было написано то же самое.
Изображение

Alex_2005
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 242
Зарегистрирован: 07.04.2005 (Чт) 17:09
Откуда: Germany, Baden-Wurttemberg, Bietigheim-Bissingen

Сообщение Alex_2005 » 18.05.2005 (Ср) 9:25

tyomitch писал(а):В самом первом ответе в топике уже было написано то же самое.

Но при чём тут GOTO оператор? ..Ладно, по большому счёту ты прав, это мелочь, извени, если тебя это как - то обидело или может раздражало. :oops:
Guten Morgen! А если не Guten, то тогда это и не Morgen...


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

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

Сейчас этот форум просматривают: Google-бот, SemrushBot и гости: 78

    TopList  
cron