Как создать массив кнопок на панели компоновки потока в C с элементами управления

#arrays #winforms #c -cli #flowlayoutpanel

#массивы #winforms #c -cli #flowlayoutpanel

Вопрос:

Я создаю сетку, состоящую из кнопок 9×9 на панели компоновки потока.

Я узнал, что панель компоновки потока может автоматически упорядочивать и изменять размеры кнопок, которые я буду добавлять. Я также узнал, что я могу создать массив кнопок в цифровом виде с помощью этого кода

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

который создает двумерный массив кнопок, состоящий из элементов 9×9, но я хочу спросить, как мне отобразить его в интерфейсе?

У меня была идея чего-то подобного

 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».

Я также хочу добавить элементы управления в кнопки. Всякий раз, когда я нажимаю определенную кнопку, я хочу, чтобы она имела увеличивающееся значение при отображении ее номера.

Любая помощь будет оценена. Кроме того, пожалуйста, дайте мне знать, если мои начальные коды каким-то образом неверны. Спасибо!

Ответ №1:

недопустимое количество индексов для этого типа cli::array

 matrix[oucounter][incounter]
  

У вас есть доступ к двум массивам, внешнему массиву, затем внутреннему массиву, но то, что вы объявили, является одним 2D-массивом. Для этого синтаксис:

 matrix[oucounter, incounter]
  

Если вы хотите отобразить их в пользовательском интерфейсе, вам нужно сначала создать объекты Button.

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

Я не эксперт по WinForms, но я считаю, что стандартный способ вставить кнопку в форму — это не устанавливать родительский элемент кнопки, а скорее добавлять кнопку в список элементов управления формы.

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

Комментарии:

1. Я смог создать новую кнопку с вашим исправленным синтаксисом, но в "this->Children->Add(matrix[oucounter, incounter]);" ‘, который является классом «CppWinForm1::MyForm», нет элемента «Дочерние элементы» . Я думаю, что это проблема, почему я не могу поместить кнопку на панель компоновки потока.

2. Код работает сейчас, но кнопки нет на панели компоновки потока, из-за чего кнопки находятся в одном и том же месте. Смотрите рисунок

3. Попробуйте добавить его на панель компоновки потока, а не непосредственно в форму. Возможно, вам потребуется установить некоторые другие свойства для кнопок и / или на панели компоновки потока. Если у вас все еще возникают проблемы, задайте другой вопрос более конкретно о компоновке, а не о синтаксических ошибках. (Предполагается, что вы должны задавать только один вопрос за сообщение.)