如何将随机选中的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
相关产品推荐
相关产品推荐

