如何使用控件在 C++ 的流布局面板中创建按钮数组

How to create an array of buttons in a Flow Layout Panel in C++ with controls

我正在制作一个由 Flow 布局面板中的 9x9 按钮组成的网格框。

我了解到 Flow 布局面板可以自动排列和自动调整我将要添加的按钮的大小。我还了解到我可以通过这段代码以数字方式创建一个按钮数组

    cli::array<Button^, 2>^ matrix = gcnew cli::array<Button^, 2>(9, 9);

其中创建了一个由9x9元素组成的二维按钮数组,但我想问一下如何在界面中显示?

我有这样的想法

private: System::Void Area_Paint(System::Object^  sender, System::Windows::Forms::PaintEventArgs^  e) 
{
//"Area" is the name of the Flow layout Panel

cli::array<Button^, 2>^ matrix = gcnew cli::array<Button^, 2>(9, 9);

for (int oucounter = 0; oucounter < 9; oucounter++) 
 {
    for (int incounter = 0; incounter < 9; incounter++) 
    {
        matrix[oucounter][incounter]->Parent = this; //error
        matrix[oucounter][incounter]->Text = "0"; //error
    }
 }
}

不过,我遇到了一个错误 "invalid number of subscripts for this cli::array type"。

我还想在按钮中添加控件。每当我点击一个特定的按钮时,我希望它在显示的数字上有一个递增的值。

如有任何帮助,我们将不胜感激。另外,如果我的起始代码在某些方面不正确,请告诉我。谢谢!

invalid number of subscripts for this cli::array type

matrix[oucounter][incounter]

你所拥有的是访问两个数组,一个外部数组然后一个内部数组,但你声明的是一个二维数组。为此,语法是:

matrix[oucounter, incounter]

如果要在 UI 上显示这些,您需要先 create Button 对象。

matrix[oucounter, incounter] = gcnew Button();

我不是 WinForms 专家,但我相信将按钮插入表单的标准方法不是设置按钮的父级,而是 add the button to the list of the form's controls

this->Controls->Add(matrix[oucounter, incounter]);