Показать полную графическую версию : [решено] Delphi | Как сделать, чтобы в дочерней форме...
Проблема такова. При запуске программы в основной форме я ввожу некое число. Нажимаю ОК. Должна открыться дочерняя форма, в которой уже будет находиться несколько полей для ввода чисел (число полей равно числу, вводимому на основной форме). Далее с этими числами будет производиться некий счет и все они будут записываться в файл. Вопрос таков: как именно реализовать переход от основной формы к дочерней, чтобы было нужное количество полей?
P.S. Прошу прощения, если вопрос очень тупой, я в программировании почти полный ноль, но прогу нужно срочно написать, кровь из носу.
JASterus
25-09-2006, 15:26
грид на дочернюю форму
Что есть грид? *смущенно*
Madmech
TDrawGrid....
а вообще просто динамически создаемы необходимое кол-во TEdit'ов...
TEdit *te=new TEdit;
te->Top=...;
te->Left=....;
(C++)...
Хорошо, это я понял, а как тогда сделать, чтобы во 2-м модуле, где прописаны свойства и методы дочерней формы, использовались значения переменных из 1-го (основного) модуля? Дело в том, что значения переменных k и n, отвечающих за количество столбцов и строк в дочерней форме, задаются в реализации одного из методов 1-го модуля, то есть после implementation, и, значит, не видны для 2-го модуля.
Можно после implementation второго модуля написать строчку
uses Unit1;
После этого будет доступен первый модуль. Нужные переменные придется делать глобальными, чтоб можно было их считать.
Сделал уже давно! Все равно не помогает! Второй модуль видит эти переменные, при компиляции ничего не гавкает, но не воспринимает их значения, которые я задал в реализации методов в первом модуле.
В первом модуле:
procedure TForm1.Button1Click(Sender: TObject);
begin
k := StrToInt(Trim(Edit1.Text));
n := StrToInt(Trim(Edit2.Text));
Form2.Show;
end;
Во втором модуле:
procedure TForm2.FormCreate(Sender: TObject);
var i, j: integer;
begin
with StringGrid1 do
begin
ColCount := n;
RowCount := 2*k+1+4;
for i := 1 to n do
Cells[i,0] := 'Шпангоут №'+IntToStr(i);
for j:= 1 to k do
Cells[0,j] := 'f(x'+IntToStr(j)+')';
for j:= k+1+4 to 2*k+4 do
Cells[0,j] := 'fкорр(x'+IntToStr(j-k-4)+')';
Cells[0,k+1] := 'fср';
Cells[0,k+2] := 'a1';
Cells[0,k+3] := 'b1';
Cells[0,k+4] := 'c2';
end;
end;
Все равно при компиляции k и n воспринимаются равными нулю, как будто я не задавал их значения.
Во втором модуле не нужно объявлять глобальные переменные k и n. А обращатся к ним нужно вот так:
Form1.k
Form1.n
Как вариант, можно обращаться непосредственно к Edit`у первой формы:
k := StrToInt(Trim(Form1.Edit1.Text));
n := StrToInt(Trim(Form1.Edit2.Text));
Спасибо! Проблема решена. Я сделал это так, если кому интересно:
procedure TForm1.Button1Click(Sender: TObject);
begin
k := StrToInt(Trim(Edit1.Text));
n := StrToInt(Trim(Edit2.Text));
Application.CreateForm(TForm2, Form2);
Form2.Show;
end;
Нажимая на Button1 в 1-й форме, я перехожу во 2-ю, дочернюю форму, где строится таблица k x n.
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.