Delphi 为动态按钮创建新的BTN单击过程

Delphi 为动态按钮创建新的BTN单击过程,delphi,delphi-7,Delphi,Delphi 7,创建动态按钮的新过程时遇到问题。单击按钮时,它应该将项目发送到RichEdit 我已经声明了我的所有对象和过程 这是我的密码: type TfrmSale = class(TForm) redOutput: TRichEdit; btnBuy: TButton; procedure btnBuyClick(Sender: TObject); private pnlSale : TPanel; edtQuantity : TEdit; rgp

创建动态按钮的新过程时遇到问题。单击按钮时,它应该将项目发送到RichEdit

我已经声明了我的所有对象和过程

这是我的密码:

type
  TfrmSale = class(TForm)
    redOutput: TRichEdit;
    btnBuy: TButton;
    procedure btnBuyClick(Sender: TObject);
  private
    pnlSale : TPanel;
    edtQuantity : TEdit;
    rgpOptions : TRadioGroup;
    btnSelect : TButton;
    procedure btnSelectCick(Sender: TObject);
  public
    { Public declarations }
  end;

var
  frmSale: TfrmSale;

implementation

{$R *.dfm}

procedure TfrmSale.btnBuyClick(Sender: TObject);
begin
  pnlSale := TPanel.Create(frmSale);
  pnlSale.Parent := frmSale;
  pnlSale.Left := 10;
  pnlSale.Top := 10;
  pnlSale.Width := 350;
  pnlSale.Height := 250;
  pnlSale.Visible := True;

  edtQuantity := TEdit.Create(pnlSale);
  edtQuantity.Parent := pnlSale;
  edtQuantity.Left := 50;
  edtQuantity.Top := 60;
  edtQuantity.Width := 80;
  edtQuantity.Height := 20;
  edtQuantity.Text := 'Quantity';
  edtQuantity.Visible := True;

  rgpOptions := TRadioGroup.Create(pnlSale);
  rgpOptions.Parent := pnlSale;
  rgpOptions.Left := 30;
  rgpOptions.Top := 100;
  rgpOptions.Width := 300;
  rgpOptions.Height := 140;
  rgpOptions.Visible := True;
  rgpOptions.Caption := 'Options';
  rgpOptions.Items.Add('Screws 12mm');
  rgpOptions.Items.Add('Canned Peaches 250g');
  rgpOptions.Items.Add('Tomatoes');
  rgpOptions.Items.Add('Spaghetti 500g');
  rgpOptions.Items.Add('Twin Flex 5m');
  rgpOptions.Items.Add('Clear Glue 250ml');

  btnSelect := TButton.Create(frmSale);
  btnSelect.Parent := frmSale;
  btnSelect.Left := 130;
  btnSelect.Top := 260;
  btnSelect.Width := 80;
  btnSelect.Height := 40;
  btnSelect.Caption := 'Select';
  end;

procedure TfrmSale.btnSelectClick(Sender: TObject);
  case rgpOptions.ItemIndex of
      1 := redOutput.Lines.Add('Screws 12mm');
      2 := redOutput.Lines.Add('Canned Peaches 250g');
      3 := redOutput.Lines.Add('Refil Blue Pen');
      4 := redOutput.Lines.Add('Tomatoes');
      5 := redOutput.Lines.Add('Spaghetti 500g');
      6 := redOutput.Lines.Add('Twin Flex 5m');
      7 := redOutput.Lines.Add('Clear Glue 250ml');
  end

请有人帮我做一个
OnClick
程序

正如特拉玛所说。如果要在代码中创建按钮,还需要在代码中分配OnClick处理程序

type
  TfrmSale = class(TForm)
    redOutput: TRichEdit;
    btnBuy: TButton;
    procedure btnBuyClick(Sender: TObject);     <<--- link made in designer
  private                                      VVVVV-- from here on it's 
    pnlSale : TPanel;                                  your responsibility
    edtQuantity : TEdit;
    rgpOptions : TRadioGroup;
    btnSelect : TButton;
    procedure btnSelectCick(Sender: TObject);  <<-- link must be made in code
  public
    { Public declarations }
  end;

var
  frmSale: TfrmSale;

implementation

{$R *.dfm}

procedure TfrmSale.btnBuyClick(Sender: TOBject);
begin
  pnlSale := TPanel.Create(frmSale);
  pnlSale.Parent := frmSale;
  pnlSale.Left := 10;
  pnlSale.Top := 10;
  pnlSale.Width := 350;
  pnlSale.Height := 250;
  pnlSale.Visible := True;

  edtQuantity := TEdit.Create(pnlSale);
  edtQuantity.Parent := pnlSale;
  edtQuantity.Left := 50;
  edtQuantity.Top := 60;
  edtQuantity.Width := 80;
  edtQuantity.Height := 20;
  edtQuantity.Text := 'Quantity';
  edtQuantity.Visible := True;

  rgpOptions := TRadioGroup.Create(pnlSale);
  rgpOptions.Parent := pnlSale;
  rgpOptions.Left := 30;
  rgpOptions.Top := 100;
  rgpOptions.Width := 300;
  rgpOptions.Height := 140;
  rgpOptions.Visible := True;
  rgpOptions.Caption := 'Options';
  rgpOptions.Items.Add('Screws 12mm');
  rgpOptions.Items.Add('Canned Peaches 250g');
  rgpOptions.Items.Add('Tomatoes');
  rgpOptions.Items.Add('Spaghetti 500g');
  rgpOptions.Items.Add('Twin Flex 5m');
  rgpOptions.Items.Add('Clear Glue 250ml');

  btnSelect := TButton.Create(frmSale);
  btnSelect.OnClick:= btnSelectCick;   <<-- Assign the button handler
  btnSelect.Parent := frmSale;
  btnSelect.Left := 130;
  btnSelect.Top := 260;
  btnSelect.Width := 80;
  btnSelect.Height := 40;
  btnSelect.Caption := 'Select';
  end;

procedure TfrmSale.btnSelectClick(Sender: TOBject);
begin
  redOutput.Lines.Add(rgpOptions.Lines[rgpOptions.ItemIndex]);  <<-- DRY
end;
类型
TfrmSale=类(TForm)
产量:三分之一;
btnBuy:t按钮;

程序btnBuyClick(发送方:TObject);您缺少
OnClick
事件与方法的绑定,
btnSelect.OnClick:=btnSelectClick创建按钮时。为什么要动态创建此按钮?您可以将所有这些添加到面板上,并将
可见性设置为false。然后,显示面板,而不是创建它。这样,您就可以在表单设计器中进行设计,只需双击按钮即可添加事件处理程序。@WoutervanNifterick我在一次考试中问过这个问题,我得到了动态对象的分数,如果我在表单上创建了一个按钮并将其设置为
可见:=false
,我就不会得到分数。