Вниз
Скачать: CL | DM;

проблемы с модальной формой   Найти похожие ветки 

← →
Эли   (2005-03-05 09:10) [0]

try Form5:=TForm5.Create(Self); except end;
Form5.ShowModal;
try Form5.Destroy; except end;

.......

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

Что-то тут не так? Почему второй раз не удается создать форму? Почему после закрытия приложения после этой процедуры Виндоуз докладывает об ошибках? Третий день с багом разобраться не могу!


← →
evvcom ©   (2005-03-05 09:17) [1]

Сам то понял, что написал?
Зачем Form5:=TForm5.Create(Self); в try заключил? Т.е. пытаться работать непонятно с чем, если вдруг конструктор отработал с исключением? Отсюда и баги.
И вообще-то принято вызывать не деструктор напрямую, а Free.


← →
Эли   (2005-03-05 09:30) [2]

а Free ничего не меняет - я и это пробовал
и try except ничего не меняет - просто еще более странным оказывается поведение программы при закрытии приложения


← →
evvcom ©   (2005-03-05 09:39) [3]

Ошибка локализована? Если закомментарить от Create до Destroy ошибка исчезает?
Create в try здесь помещать не надо затем, чтобы, если возникнет там исключение, то не работать с несуществующим объектом Form5. Если уж какие-то исключения могут возникнуть при работе с классом, то пишут примерно так:

MyObject := TMyObject.Create(AOwner);
try
 MyObject.MyMethod; // Здесь может быть exception
finally
 MyObject.Free;
end;


← →
XP   (2005-03-05 09:43) [4]

Попробуйте:
var
 ModForm: TForm5;
begin
 ModForm := TForm5.Create(Self);
 try
   ModForm.ShowModal;
 finally
   ModForm.Free;
 end;
end;


Хотя, это телепатия какая-то.


← →
HSolo ©   (2005-03-05 10:24) [5]

with TForm5.Create(self) do
try
  ShowModal;
finally
  Free;
end;


← →
evvcom ©   (2005-03-05 10:36) [6]


> HSolo ©   (05.03.05 10:24) [5]
> with TForm5.Create(self) do

Если код настолько прост, то можно и так сделать. Но если внутри with приличный кусок кода с множеством пропертей и т.п., то я не использую with по нескольким причинам:
1. Код сложнее читать, начинаешь путаться а к какому объекту относится эта проперть (особенно, если эти with каскадно наставлены)
2. В редакторе под отладчиком уже не посмотришь значение этой проперти простым наведением мыши.
3. Собственно от этого with мы ничего не экономим. Компилятор все равно в стеке выделяет 4 байта для созданного объекта и кладет туда результат работы конструктора.

Возможно, это не полный список недостатков, а вот достоинств этого вообще придумать не могу.


← →
HSolo ©   (2005-03-05 11:10) [7]

>evvcom ©   (05.03.05 10:36) [6]

>если внутри with приличный кусок кода с множеством пропертей и т.п., то я не использую with

Я тоже. Но в вопросе значится код, который именно "настолько прост", что "можно и так сделать"



Страницы: 1 вся ветка

Скачать: CL | DM;



Память: 0.46 MB
Время: 0.023 c
1-1109775545
Гость
2005-03-02 17:59
2005.03.20
Как отобразить (в ПрогрессБаре, напр.) процесс копирования файла?


3-1108553956
Gost
2005-02-16 14:39
2005.03.20
Как просканировать таблицу (парадокс) с последней записи?


3-1108843434
Сергей Ю.
2005-02-19 23:03
2005.03.20
Распространение приложения связанного с БД


14-1109313879
Cosinus
2005-02-25 09:44
2005.03.20
Не загружается Windows2000. После ввода пароля,просто синий экран


11-1093082309
Алексей
2004-08-21 13:58
2005.03.20
Как в mainmenu установить горячую клавишу "Esc"?




   Наверх