Форум: "Основная";
Текущий архив: 2005.03.20;
Скачать: [xml.tar.bz2];
Внизпроблемы с модальной формой Найти похожие ветки
← →
Эли (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;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.046 c