#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. Попробуйте добавить его на панель компоновки потока, а не непосредственно в форму. Возможно, вам потребуется установить некоторые другие свойства для кнопок и / или на панели компоновки потока. Если у вас все еще возникают проблемы, задайте другой вопрос более конкретно о компоновке, а не о синтаксических ошибках. (Предполагается, что вы должны задавать только один вопрос за сообщение.)