gpt4 book ai didi

arrays - 如何检查是否单击了二维数组的任何按钮?

转载 作者:行者123 更新时间:2023-12-03 19:15:18 25 4
gpt4 key购买 nike

我正在尝试建立一个扫雷程序。到目前为止,我使用变量Buttons[rows][cols]制作了一个二维按钮数组,以便可以将字段上的每个按钮作为目标。这些按钮在运行时在表单上创建。现在,我需要知道如何确定是否单击了按钮。

我知道您可以检查if Sender = Button,但是它如何与二维数组一起使用?由于我是在运行时创建按钮(FormCreate)的,因此我如何创建可执行代码的过程,因为它当然不应该检查运行时是否单击了按钮。

有人会这么友好地告诉我单击按钮后如何禁用它吗?为此,显然,我需要知道如何确定单击了哪个按钮。

最佳答案

创建按钮时,将其Tag属性设置为ID:

Button.Tag := Col + Row*ColCount;


给每个按钮相同的 OnClick事件处理程序。

Button.OnClick := ButtonClick;


这两行代码将在这样的循环中:

for Row := 0 to RowCount-1 do
for Col := 0 to ColCount-1 do
begin
Button := TButton.Create(Self);
Button.Parent := Self;
Button.Left := ...;
Button.Top := ...;
Button.Tag := ...;
Button.OnClick := ...;
Buttons[Row,Col] := Button;
end;


我希望您已经有这样的代码。

实现事件处理程序以对ID进行解码,如下所示:

procedure TMyForm.ButtonClick(Sender: TObject);
var
Button: TButton;
Row, Col: Integer;
begin
Button := Sender as TButton;
Row := Button.Tag div ColCount;
Col := Button.Tag mod ColCount;
// respond to click
end;


通过将控件的 Enabled属性设置为 False来禁用该控件。

在这里,我假设索引从零开始,并且您的按钮是 TButton。如果这些假设是错误的,那么您显然需要适应您的方案。

我认为这可以回答您提出的问题。但是,为每个网格正方形使用按钮可能是实现Minesweeper的错误方法。最好使用 TPaintBox,用于保存状态的非可视结构以及用于绘画框的单个 OnClick处理程序。

关于arrays - 如何检查是否单击了二维数组的任何按钮?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29926224/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com