【问题标题】:How to create an array of buttons in a Flow Layout Panel in C++ with controls如何使用控件在 C++ 中的流布局面板中创建按钮数组
【发布时间】:2016-10-10 15:00:37
【问题描述】:

我正在制作一个由 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
    }
 }
}

虽然,我遇到了一个错误“此 cli::array 类型的下标数无效”。

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

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

【问题讨论】:

    标签: arrays winforms c++-cli flowlayoutpanel


    【解决方案1】:

    此 cli::array 类型的下标数无效

    matrix[oucounter][incounter]
    

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

    matrix[oucounter, incounter]
    

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

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

    我不是 WinForms 专家,但我相信将按钮插入表单的标准方法不是设置按钮的父级,而是将 add 按钮添加到表单的 @ 列表中987654323@。

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

    【讨论】:

    • 我能够使用您更正的语法创建一个新按钮,但 "this-&gt;Children-&gt;Add(matrix[oucounter, incounter]);" 中出现错误,即 class "CppWinForm1::MyForm" has no member "Children" 。我认为这就是为什么我不能将按钮放在流布局面板中的问题。
    • 代码现在可以工作了,但是按钮不在流布局面板中,这使得按钮在同一个地方。见picture
    • 尝试将其添加到流布局面板中,而不是直接添加到表单中。您可能需要在按钮和/或流布局面板上设置一些其他属性。如果您仍然遇到问题,请更具体地询问有关布局的问题,而不是语法错误。 (每个帖子你应该只问一个问题。)
    猜你喜欢
    • 2018-05-31
    • 1970-01-01
    • 2022-01-19
    • 1970-01-01
    • 2014-08-07
    • 1970-01-01
    • 2010-09-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多