Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.03.20;
Скачать: 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 вся ветка

Текущий архив: 2005.03.20;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.041 c
6-1105603415
Artem Osipov
2005-01-13 11:03
2005.03.20
Протокол обмена между VNC сервером и клиентом


3-1108621977
Evyshka
2005-02-17 09:32
2005.03.20
Нарастающий итог


9-1103966490
GlintweiN
2004-12-25 12:21
2005.03.20
Помогите с установкой


4-1107873140
Fessio
2005-02-08 17:32
2005.03.20
Как узнать имя компьютера и его описание в WINXP?


1-1110188990
diman
2005-03-07 12:49
2005.03.20
перезагрузка прогаммы