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



我正在尝试构建一个扫雷程序。到目前为止,我用变量 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.如果这些假设是错误的,你显然需要适应你的方案。

我认为这回答了你提出的问题。但是,为每个网格方块使用按钮可能是实现扫雷的错误方法。你最好有一个TPaintBox,一个非视觉结构来保存状态,以及一个用于油漆盒的OnClick处理程序。

相关内容

最新更新