You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将随机选中的TPanel组件名称赋值给变量?

解决Delphi中保存随机选中面板及在OnClick事件中获取面板信息的问题

一、保存随机选中的面板到变量

你可以通过声明TPanel类型的变量接收FindPanel的返回值,以此记录哪一个是被选中的正确面板。如果需要在窗体其他方法中访问这个面板,建议在窗体类的private区域声明类级变量:

type
  TForm1 = class(TForm)
    btnTest1: TButton;
    // ... 其他组件声明
    procedure btnTest1Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure pnlCorrectClick(Sender: TObject);
    procedure pnlWrongClick(Sender: TObject);
  private
    FCorrectPanel: TPanel; // 用于保存选中的正确面板
  public
    { Public declarations }
  end;

然后修改btnTest1Click过程,把随机选中的面板赋值给变量:

procedure TForm1.btnTest1Click(Sender: TObject);
var
  i, j: Integer;
  SelectedPanel: TPanel; // 局部临时变量

  function FindPanel(iChar, iNum: Integer): TPanel;
  var
    cChar: Char;
    sPanelName: string;
  begin
    cChar := Char(Ord('A') + iChar);
    sPanelName := 'pnl' + cChar + IntToStr(iNum);
    Result := FindComponent(sPanelName) as TPanel;
  end;

begin
  // 重置所有面板的OnClick事件
  for i := 0 to 7 do
  begin
    for j := 1 to 7 do
      FindPanel(i, j).OnClick := pnlWrongClick;
  end;

  // 随机选中一个面板,赋值给变量并设置事件
  SelectedPanel := FindPanel(Random(8), Random(7) + 1);
  SelectedPanel.OnClick := pnlCorrectClick;
  FCorrectPanel := SelectedPanel; // 保存到类变量,方便后续访问
  // 如果只需要面板名称,也可以直接保存:sCorrectpanel := SelectedPanel.Name;
end;

二、在OnClick事件中利用Sender参数获取面板信息

Sender参数就是触发点击事件的组件本身,将其转为TPanel类型后,就能直接获取它的名称、属性等信息:

procedure TForm1.pnlCorrectClick(Sender: TObject);
begin
  if Sender is TPanel then
    ShowMessage(Format('Correct panel: %s', [(Sender as TPanel).Name]));
end;

procedure TForm1.pnlWrongClick(Sender: TObject);
begin
  if Sender is TPanel then
    ShowMessage(Format('Wrong panel: %s', [(Sender as TPanel).Name]));
end;

说明

  • 类变量FCorrectPanel可以在窗体的任何方法中使用,比如你需要在其他按钮点击时获取正确面板的信息,直接访问它即可。
  • 使用Sender参数的好处是,不需要额外存储每个面板的信息,点击时直接从触发事件的组件本身获取数据,代码更简洁灵活。

内容的提问来源于stack exchange,提问作者Low von dyk

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 23:55:37