我正在使用德爾福7.我已經寫了一些代碼來創建按鈕在運行時(我需要在每個窗體上完全相同的位置上的許多完全相同的按鈕,這就是爲什麼我決定這麼做)。但是我在程序中引用它們時遇到了困難(確切地說,OnClick)。我想要單擊按鈕時打開另一個表單。德爾福 - 在運行時創建的問題引用對象
unit Unit2;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, jpeg, ExtCtrls;
procedure buttons(a: TForm);
type
TForm2 = class(TForm)
Image1: TImage;
procedure FormShow(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form2: TForm2; Button1, Button2, Button3, Button4: TButton;
implementation
uses Unit3, Unit4;
{$R *.dfm}
procedure buttons(a: TForm);
begin
Button1 := TButton.Create(a);
Button1.Name := 'Button1';
Button1.Left := 712;
Button1.Top := 96;
Button1.Width := 81;
Button1.Height := 41;
Button1.Visible := True;
Button1.Parent := a;
Button1.Enabled := False;
Button1.Caption := 'Go forwards';
Button2 := TButton.Create(a);
Button2.Name := 'Button2';
Button2.Left := 800;
Button2.Top := 152;
Button2.Width := 81;
Button2.Height := 41;
Button2.Visible := True;
Button2.Parent := a;
Button2.Enabled := False;
Button2.Caption := 'Go right';
Button3 := TButton.Create(a);
Button3.Name := 'Button3';
Button3.Left := 624;
Button3.Top := 152;
Button3.Width := 81;
Button3.Height := 41;
Button3.Visible := True;
Button3.Parent := a;
Button3.Enabled := False;
Button3.Caption := 'Go left';
Button4 := TButton.Create(a);
Button4.Name := 'Button4';
Button4.Left := 712;
Button4.Top := 208;
Button4.Width := 81;
Button4.Height := 41;
Button4.Visible := True;
Button4.Parent := a;
Button4.Enabled := False;
Button4.Caption := 'Go back';
end;
procedure TForm2.FormShow(Sender: TObject);
begin
buttons(Form2);
Button1.Enabled := True;
Button2.Enabled := True;
end;
procedure TForm2.Button1Click(Sender: TObject);
begin
Form3.Show;
Form2.Hide;
end;
procedure TForm2.Button2Click(Sender: TObject);
begin
Form4.Show;
Form2.Hide;
end;
end.
我已經在'type'中聲明瞭OnClicks,因爲我可能應該這樣做。該程序運行,但創建的按鈕不起作用,但可點擊。想法?
P.S .:我知道我可以編寫更簡潔的代碼來創建所有這些按鈕,但我沒有時間思考它,而且這非常重要。我知道這可能很難閱讀 - 所有你需要知道的是,我在每個按鈕上設置了相同的屬性 - 你只需要看Button1,其他的都是一樣的。
P.P.S .:不是這個dup問題:Delphi - Referencing Components created at Runtime。我找不到解決我那個問題的方法。
'Button1:= TButton.Create(Button1);'應該讀取'Button1:= TButton.Create(a);'。 –
謝謝,它應該。它沒有改變,但 - 按鈕仍然不起作用。 – Valikojan