Помощь - Поиск - Пользователи - Календарь
Полная версия: Взаимодействие между двумя Form
Форум «Всё о Паскале» > Delphi, Assembler и другие языки. > Delphi
marwell
Имеются две формы 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
Не надо скрывать форму, закрывай ее:

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
Цитата(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 спасибо!
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.