DELPHI.Дорабатываем наше приложение для удобства работы пользователя

     Итак, вернемся к нашему первому примеру, где мы создали две формы и кнопку для открытия второй формы. Какая здесь еще есть непутёвщина. Смотрите…, пользователь запустил ваше приложение, развернул на весь экран форму, и нажал кнопку(меню) для добавления каких-либо данных – открывается наша вторая форма.  Казалось бы опять всё нормально, он введет данные на форме2, нажмет «Ок», форма закроется,  … а нет, таких пользователей не бывает. Пока он решался ввести данные, ему пришла почта)), отвлёкся. Затем решился вернуться к нашей программе и доделать начатое, .. но формы уже нет на экране, она запущена но её нет…

 Пользователь нажимает второй раз кнопку добавления данных – форма появляется. И … вот тут-то и может скрываться косяк…

Если при вызове формы добавления данных вы используете какую-либо подготовку, типа прибавления счетчика новой записи, или подготовки базы данных и т.д. или того еще хуже – перед открытием формы2 – вы очищаете все введенные данные, чтобы подготовить форму для ввода, так как вы считаете что пользователь просто хочет добавить новые данные.

    Конечно найдется много скептиков и ярых сторонников того, что не нужно делать никаких предварительных подготовок перед запуском формы, или проверять открыта ли форма и просто показывать её снова, подходы разные, но самый простой – открывать окно не через .show() а через .showModal();

Замените в нашем примере show(), на showModal() и ваше окно ввода данных никуда больше не будет исчезать, тем более вы можете получить обратную связь при закрытии этого окна, чтобы соответственно правильно отработать ситуацию с закрытием формы2.

procedure TForm1.Button1Click(Sender: TObject);

begin

 //Form2.Show;

  Form2.ShowModal;

end;

end.

Теперь наша форма никуда не денется. При запуске формы2, наша процедура нажатия кнопки будет дожидаться пока форма отработает.

Способ2. Проблемный, но как закрытие глюков) подойдет.

Идея – при открытии формы2, делать недоступной для работы с ней – форму1, а при закрытии формы2 – возвращать доступность форме1.

Для этого перед запуском формы2 делаем вот так:

procedure TForm1.Button1Click(Sender: TObject);

begin

 Form1.Enabled :=false;

  Form2.Show;

  end;

//…..

end.

И добавляем событие при закрытии формы2, onClose

procedure TForm2.FormClose(Sender: TObject; var Action: TCloseAction);

begin

 Form1.Enabled :=true;

end;

//…..

end.


 

Добавить комментарий