Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Delphi _ Взаимодействие между двумя Form

Автор: marwell 6.12.2012 17:36

Имеются две формы Form1 и Form2. Form1 - главная. В процессе работы при клике на Button3 открывается модально Form2, в этой второй форме пользователь выбирает чекбоксы, жмет кнопку, Form2 скрывается, показывается form1, в которой обрабатываются эти данные. На первом нажатии все работает, но если нажать второй раз этот Button3, то уже вылезает ошибка "cannot make a visible window modal". Смысл ошибки я понимаю, но как исправить - не знаю.
в Form1:


procedure TForm1.Button3Click(Sender: TObject);
begin
if Edit1.Text='' then MessageDLG('Не заполнено поле "Name"',mtError,[mbOK],0)
else begin
Save:=True;
Form1.Hide;
Form2.ShowModal; //если тут делать просто Show, то получается не то что надо
end;
Save:=False;
end;

в Form2:
procedure TForm2.Button1Click(Sender: TObject);
begin
Form2.Hide;
Form1.Button1.Click;
Form1.Button2.Click;
Form1.Show;
end;

в form1.button1.click и form1.button2.click после обработки чекбоксы снимаются

Автор: IUnknown 6.12.2012 19:02

Не надо скрывать форму, закрывай ее:

procedure TForm1.Button3Click(Sender: TObject);
begin
if Edit1.Text='' then MessageDLG('Не заполнено поле "Name"',mtError,[mbOK],0)
else begin
Save:=True;
Form1.Hide;
Form2.ShowModal; //если тут делать просто Show, то получается не то что надо
Form1.Show;
end;
Save:=False;
end;

procedure TForm2.Button1Click(Sender: TObject);
begin
//Form2.Hide;
Form1.Button1.Click;
Form1.Button2.Click;
//Form1.Show;
Self.Close; // Закроет Form2
end;
, тогда не будет этой ошибки...

Автор: marwell 6.12.2012 19:11

Цитата(IUnknown @ 6.12.2012 19:02) *

Не надо скрывать форму, закрывай ее:

procedure TForm1.Button3Click(Sender: TObject);
begin
if Edit1.Text='' then MessageDLG('Не заполнено поле "Name"',mtError,[mbOK],0)
else begin
Save:=True;
Form1.Hide;
Form2.ShowModal; //если тут делать просто Show, то получается не то что надо
Form1.Show;
end;
Save:=False;
end;

procedure TForm2.Button1Click(Sender: TObject);
begin
//Form2.Hide;
Form1.Button1.Click;
Form1.Button2.Click;
//Form1.Show;
Self.Close; // Закроет Form2
end;
, тогда не будет этой ошибки...

а ведь была такая мысль, только проверить не успел smile.gif спасибо!