Программный запуск формы


#1

Помогите пожалуйста решать проблему. В проекте имеется два форма. Первая - главная, там создал меню. В меню Файл первой операции надо запускать форму, но у меня никак не получится. Проект прилагаю.


#2

Project5.rar (17,8 КБ)


#3

Подумайте внимательно что вы делаете в первом юните на строчке 36. self в том случае это первая форма, вам так и пишет что она уже показана. А вам надо создать новый экземпляр второй формы и показывать уже его. И зачем вы создали переменную с типом интерфейсом оставив её nil?


#4

В этом случае откроется просто новая пустая форма. А форма же имеется в проекте, но не запускается. Доработанную проект прилагаю. Project5.rar (19,1 КБ)


#5

Ну разумеется, вы создаётся объект пустой формы и получаете пустую форму. Создавайте объект вашей формы из второго юнита.


#6

Он там создан (второй юнит). В проекте приложен. Может какой то другой вариант?


#7

Во втором юните он описан, а создание объекта это прописывание new для типа.


#8

Ну в общем, у меня не получается. Вот строка меню: procedure Form1.toolStripMenuItem4_Click(sender: Object; e: EventArgs); begin var Form2 := new Form(); Form2.Show(); end; Это процедура в Unit1.pas, а форма с именем Form2 находится в Unit2.pas. Можете подскажите строку программы?


#9

Подключите второй юнит к первому через uses.


#10

Кстати на форуме можно и желательно выделять код так:

```

procedure Form1.toolStripMenuItem4_Click(sender: Object; e: EventArgs);

begin

var Form2 := new Form();

Form2.Show();

end;

```

Тогда получается так:

procedure Form1.toolStripMenuItem4_Click(sender: Object; e: EventArgs);
begin
  var Form2 := new Form();
  Form2.Show();
end;

Знак ` находится в англ. раскладке за русским ё.


#11

Да, наконец-то получилось. СПАСИБО, огромная Sun_Serega. В строке ’’’ uses System, System.Drawing, System.Windows.Forms;’’‘ добавил Unit2, а в самом процедуре ’’’ procedure Form1.toolStripMenuItem4_Click(sender: Object; e: EventArgs); begin var Form2 := new Unit2.Form2; Form2.Show(); end; ’’' Все пошло! Будем на связи в ФОРУМЕ.


#12

Можно объеденить создание и запуск второй формы в 1 строчку:

(new Unit2.Form2).Show;

или

(new Unit2.Form2).Show(self);

чтоб это была дочерняя форма к основной.

Но если вам как то надо будет потом использовать эту форму из первой - лучше добавить в класс первой формы переменную типа Unit2.Form2 и её уже запускать и создавать.