Форум программистов, компьютерный форум, киберфорум
Visual Basic
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.64/11: Рейтинг темы: голосов - 11, средняя оценка - 4.64
0 / 0 / 0
Регистрация: 12.06.2006
Сообщений: 48

Проблема с CommonDialog. - при нажатии "Отмена" программа вылетает

19.07.2006, 13:31. Показов 2415. Ответов 10
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Вообщем я ради тренировки моих скромных способностей решил написать простеёший текстовый редактор, и вот в процессе тестирования у меня возникла проблемка : если в окне редактора чё-нить написать и попробовать его закрыть (предворительно НЕ сохраняя) то он спрашивает "Текст изменён. Сохранить изменения?" Если нажать "Да", то в этом случае откроется окно "Сохранить как..." и если нажать "Отмена", то тогда появляется какая-то ошибка и редактор вылетает. Помогите пожалуйста! Вот весь его код:
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
Option Explicit
Dim fName As String
Dim fChanged As Boolean
Private Sub Form_Terminate()
Dim r As Integer
  Dim fn As Integer
  
  If fChanged = True Then
   r = MsgBox("Текст изменён. Сохранить изменения?", vbInformation + vbYesNo, "MEdit")
     If r = vbYes Then
       If fName = "" Then
         CommonDialog1.FileName = ""
         CommonDialog1.DefaultExt = "txt"
         CommonDialog1.Filter = "*.txt"
         CommonDialog1.ShowSave
         MsgBox CommonDialog1.FileName
         fName = CommonDialog1.FileName
       End If
       fn = FreeFile
       fName = CommonDialog1.FileName
       Open fName For Output As fn
       Print #fn, Text1.Text
       Close #fn
     End If
   End If
  Unload Form1
End Sub
Private Sub mnuAbout_Click()
Form2.Show vbModal
End Sub
Private Sub mnuExit_Click()
  Dim r As Integer
  Dim fn As Integer
  
  If fChanged = True Then
   r = MsgBox("Текст изменён. Сохранить изменения?", vbInformation + vbYesNo, "MEdit")
     If r = vbYes Then
       If fName = "" Then
         CommonDialog1.FileName = ""
         CommonDialog1.DefaultExt = "txt"
         CommonDialog1.Filter = "*.txt"
         CommonDialog1.ShowSave
         MsgBox CommonDialog1.FileName
         fName = CommonDialog1.FileName
       End If
       fn = FreeFile
       fName = CommonDialog1.FileName
       Open fName For Output As fn
       Print #fn, Text1.Text
       Close #fn
     End If
   End If
  Unload Form1
End Sub
Private Sub mnuOpen_Click()
If fChanged = True Then
  Dim r As Integer
  Dim fn As Integer
   r = MsgBox("Текст изменён. Сохранить изменения?", vbInformation + vbYesNo, "MEdit")
     If r = vbYes Then
       If fName = "" Then
         CommonDialog1.FileName = ""
         CommonDialog1.DefaultExt = "txt"
         CommonDialog1.Filter = "*.txt"
         CommonDialog1.ShowSave
    p;   If CommonDialog1.FileName <> "" Then
          fName = CommonDialog1.FileName
        Else
             Exit Sub
        End If
      fn = FreeFile
      Open fName For Output As #fn
      Print #fn, Text1.Text
      Form1.Caption = "MEdit - " & fName
      Close #fn
      fChanged = False
    End If
  End If
End Sub
Private Sub Text1_Change()
fChanged = True
End Sub
И ещё если сможете подскажите все возможности CommonDialog типа:
CommonDialog1.ShowOpen
CommonDialog1.ShowSave
CommonDialog1.FileName
и чего все они значат(выполняют) плиззз!
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
19.07.2006, 13:31
Ответы с готовыми решениями:

CommonDialog ругается при нажатии кнопки "Отмена"
Есть код, приведенный ниже. Дак вот, когда его запускаю открывается окно (как и должно), потом, если я его закрываю, нажав кнопку отмена,...

Почему вылетает программа при нажатии Enter?
Здравствуйте! Помогите, кто разбирается хорошо в ВАТ-анике )) Работает моя программа нормально, но! Если тут :LOCK cls echo...

Поиск bluetooth-устройств, программа вылетает при повторном нажатии на кнопку
есть проблема, при нажатии на кнопку должен выполняться поиск bluetooth устройств(20 секунд), после чего поиск останавливается и...

10
2 / 2 / 1
Регистрация: 18.10.2007
Сообщений: 1,748
19.07.2006, 14:03
Никто Ваш кривой код разбирать не будет.
Объясните, какой смысл по несколько раз повторять один и тот же код с сохранением? Неужели нельзя его вынести в отдельную процедуру?
Кроме того, проверять в Terminate нет никакой необходимости.
> то тогда появляется какая-то ошибка и редактор вылетает.
И как это должны понимать? Глупость какая. Что значит "какая-то ошибка"? Расставляйте точки останова, смотрите, где и какая возникает ошибка.
0
6 / 6 / 3
Регистрация: 17.10.2007
Сообщений: 1,119
19.07.2006, 19:50
Soglasen s Alexey Spirin
Kod, emmm, chudovischen... Sorry.
Oshibka po-vidimomu iz-za togo, chto CommonDialog1.CancelError u vas True. Esli tak, to postav'te ee obrabotku ili sdelajte False. Sobitie Change - ne nuzhno, po krajnej mere v takom vide. Sobitie Terminate - v topku, tak sejchas kazhetsya modno virazhat'sya.
Peremennaya "r" dolzhna imet' ne tip Integer, a VbMsgBoxResult. Stroka "If fChanged = True Then" tavtalogichna: fChanged uzhe ili TRUE ili FALSE, a raz tak, to nado pisat' "If fChanged Then"
Povtoryauschijsya kod nado spryatat' v obschij blok.
Spisok mozhno prodolzhat'....
0
6 / 6 / 3
Регистрация: 17.10.2007
Сообщений: 1,119
19.07.2006, 19:57
Da, i procedura DOLZHNA imet' odnu i tol'ko odnu tochku vixoda, a u vas schedro razbrosani "Exit Sub". A ee razmer NE DOLZHEN previshat' visotu ekrana. Za takoe kodirovanie polozheno lishenie vsex prav i sostoyaniya.
Za vneshnej besceremonnost'yu texta skrivayutsya poleznie nameki, tak chto derzajte.
0
6 / 6 / 3
Регистрация: 17.10.2007
Сообщений: 1,119
19.07.2006, 21:04
I chto eto znachit?
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
     If fName = "" Then
         CommonDialog1.FileName = ""
         CommonDialog1.DefaultExt = "txt"
         CommonDialog1.Filter = "*.txt"
         CommonDialog1.ShowSave
         MsgBox CommonDialog1.FileName
         fName = CommonDialog1.FileName
       Else
         CommonDialog1.FileName = ""
         CommonDialog1.DefaultExt = "txt"
         CommonDialog1.Filter = "*.txt"
         CommonDialog1.ShowSave
         MsgBox CommonDialog1.FileName
         fName = CommonDialog1.FileName
       End If
Zachem vo vse vetvi If pisat' tozhe samoe? Zachem togda If?
I deklarirujte peremennie v odnom kakom-to meste: v nachale proceduri. Esli oni na urovne modulya, to ispol'zujte Private, a ne Dim. Chtobi tochno videt' namereniya.

VladConn
0
1 / 1 / 1
Регистрация: 02.04.2009
Сообщений: 135
19.07.2006, 22:00
Ребят, вместо всего этого бессмысленного трепа, которым Вы наградили автора, лучше бы подсказали бы ему конструкцию On Error Goto <метка> для обработки этого случая. (Подробнее читайте MSDN)
Ну прям как дети малые.
Удачи.
0
0 / 0 / 0
Регистрация: 12.06.2006
Сообщений: 48
20.07.2006, 01:23  [ТС]
Спасибо

Я программирую на Бейсике всего 1.5 месяца (причём параллельно я ещё поступал в колледж
0
0 / 0 / 0
Регистрация: 26.02.2012
Сообщений: 43
20.07.2006, 02:50
... Da, i procedura DOLZHNA imet' odnu i tol'ko odnu tochku vixoda,
a u vas schedro razbrosani "Exit Sub".
для интереса , откуда же сие правило явилось?
0
6 / 6 / 3
Регистрация: 17.10.2007
Сообщений: 1,119
20.07.2006, 08:02
Мазур,
Для начинающего VB программиста ваша программа на самом деле очень большой успех. Ну и пусть криво, лиха беда начало. Полировать потом подучитесь.

narand,
Сие правило называется хороший стиль кодирования, выстраданный поколениями людей, занимающихся поддержкой программных продуктов, чужих и своих. Это распространенный стандарт, считающийся обязательным в IT отделах, не желающих разоряться на поддержке плохо читаемого кода. Единственное известное мне исключение из этого правила - поддержка ошибок.Таких правил много, хороших и разных. Каждое из них кажется не очень важным, но когда им всем следуют, то эффект оглушителен. Можно написать Войну и Мир, а можно и дрянь какую-то, и то и то повествование будет.
Надеюсь, для начинающего Мазура это дельный совет.

VladConn
0
2 / 2 / 1
Регистрация: 18.10.2007
Сообщений: 1,748
20.07.2006, 13:55

2Мазур: Не поймите неправильно. Конечно, для начинающего - и то не плохо. Но в любой книжке по VB говориться об отладке и отлове ошибок. Почитайте внимательнее. Ошибки сами по себе из воздуха не берутся.
Кроме того, в наших ответах есть намеки на то, в какие стороны рыть.
Каков вопрос - таков и ответ. Про "появление какой-то там ошибки" я уже писал.</P></DIV>
0
Irokez
22.07.2006, 02:04
Уважаемый Мазур.

По поводу категоричности и разкости Спирина можно долго спорить, но поверте на слово, до недавнего времени в форуме было очень много флуда, трепа и тупости. И элементарные однотипные вопросы попадались очень уж часто. В последнее время их как-то поуменьшилось. Думаю, что в этом есть и заслуга Алексея.



По поводу вашего вопроса: все кто высказался правы на все 100, и обижатся на них не стоит.

Я в вас узнал себя в молодости (хотя я и сейчас еще не очень старик ;-) )

Дерзайте. Если вам нравится програмирование, то это может стать увлечением всей жизни, а то и профессией. Тут уж как повезет. Многим из нас повезло ))



Хочу вас предостеречь от одной неприятности. Иногда (когда ты уже думаешь, что что-то умеешь)

начинает казатся, что написать нужную програмку будет проще чем искать готовую. И садишся, и делаешь. Но! И в этом вся проблема. Работа эта, обычно, никому не нужна и никогда не будет завершена. Вы только впустую потеряете время. Так вот к чему я веду. Пишите программы, которые вам (а лучше кому-то) действительно нужны, и их еще никто не писал до вас. Даже если программа будет написана в таком "стиле" как у вас сейчас, но будет полезной - это будет лучше чем написанная по всем правилам тысячная замена блокноту. Если у вас в арсенале будет программа нужная, вы сможете отточить код позже, когда у вас появится больше опыта, но она будет. И вы сможете ее кому-то показать.



Удачи! И не отчаивайтесь.
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
22.07.2006, 02:04
Помогаю со студенческими работами здесь

Резидентная программа. При нажатии клавиши F1 выводит на экран сообщение. При нажатии F2 программа выгружается.
Решил изучить книгу &quot;Программирование на ассемблере&quot; Одиноков, Коцубинский и застрял на одной задаче: &quot;Резидентная программа...

Ошибка при закрытии OpenDialog без выбора файла и при нажатии кнопки Отмена
почему при закрытии OpenDialog (если не че не открыл), или при нажатии кнопку отмена вылазеет ошибка??? Помогите плиз!!!

Отмена перехода по ячейкам при нажатии на enter
Всем привет.Надо сделать так, чтобы при нажатии на enter курсор оставался в той же ячейки. Вот этот вариант не работает ...

Отмена обработки данных при нажатии любой клавиши
При нажатии любой клавиши выполнять отмену обработки данных и выводить результат. Заранее спасибо)

Отмена нажатия input radio при нажатии на кнопку
Нужно сделать так, чтобы в onclick другой кнопки отменялся выбор input radio.


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Новые блоги и статьи
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru