delphi - 为动态按钮创建一个新的 btnClick 过程

标签 delphi delphi-7

我在为动态按钮创建新过程时遇到问题。单击该按钮时,它应该将项目发送到 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程序。

最佳答案

正如 TLama 所说。如果您要在代码中创建按钮,您还需要在代码中分配 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;

请注意,我已经调整了 btnSelectClick,以便它重新使用您之前存储到 rgpOptions 中的数据。 另请参阅:http://en.wikipedia.org/wiki/Don%27t_repeat_yourself

关于delphi - 为动态按钮创建一个新的 btnClick 过程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22710236/

相关文章:

delphi - 如何在矩形 Canvas 上绘画

delphi - Delphi软件包:Systools-我需要它!

delphi - 如何在Delphi中定义 "UCHAR * POINTER_32"和 "VOID * POINTER_32"类型?

delphi - 控件的所有者和父级有什么区别?

delphi - 尝试使用TZDB…如何在delphi 7中进行转换

delphi - 如何获取页面控件上的元素?

file - 缓冲文件(用于更快的磁盘访问)

delphi - 将 Delphi 7 pgm 限制到公司 LAN

delphi - 在终端服务器上运行的 Delphi 7 应用程序的推荐 PE header 设置?

Delphi 7 编译随着时间的推移变得越来越慢?