Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > Windows Forms
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 02.01.2011, 15:26   #1
ololo-schoolboy
Форумчанин
 
Регистрация: 25.12.2010
Сообщений: 247
По умолчанию коллекция елементов windows forms

Хочу сделать что нибудь типа Button ^ battonArr[size][size]; Как это делается?
ololo-schoolboy вне форума Ответить с цитированием
Старый 02.01.2011, 18:19   #2
UltimaBeaR
Форумчанин
 
Аватар для UltimaBeaR
 
Регистрация: 21.12.2010
Сообщений: 199
По умолчанию

ну так и делается наверно, если так ругается то можно попробовать использовать .net-овский массив

System::Array<Button^> ^arrayOfButtons;
ну или если двумерный то так наверно
System::Array<System::Array<Button^ > ^> ^arrayOfButtons;
ну и потом выделяешь память под массивы через gcnew
UltimaBeaR вне форума Ответить с цитированием
Старый 02.01.2011, 19:35   #3
ololo-schoolboy
Форумчанин
 
Регистрация: 25.12.2010
Сообщений: 247
По умолчанию

так тоже не получается, попробовал так: cli::array<cli::array<Button ^, size> ^, size> ^ buttonsArr; вроде ошибок нет тока как с этим работать ума не приложу, да еще почему нельзя выделять память просто new, до этого думал что всегда выделяют gcnew из-за того что следить в падлу
ololo-schoolboy вне форума Ответить с цитированием
Старый 02.01.2011, 20:45   #4
UltimaBeaR
Форумчанин
 
Аватар для UltimaBeaR
 
Регистрация: 21.12.2010
Сообщений: 199
По умолчанию

Да действительно не System::Array а cli::array но смысл от этого не меняется.
Код:
int width = 5;
int height = 10;

cli::array<cli::array<System::Windows::Forms::Button^>^> ^arrayOfButtons = gcnew cli::array<cli::array<System::Windows::Forms::Button^>^>(width);

for (int i = 0; i < width; i++)
{
	arrayOfButtons[i] = gcnew cli::array<System::Windows::Forms::Button^>(height);

	for (int j = 0; j < height; j++)
		arrayOfButtons[i][j] = gcnew System::Windows::Forms::Button();
}

arrayOfButtons[4][9]->Text = "Последняя кнопка в 2мерном массиве";
Вот рабочий код создает массив выделяет память и даже кнопки создает

ЗЫ: использовать C++/CLI для окошек без особой на то причины смысла мало - код нечитаем сам видешь. Учи C# - он очень похож по синтаксису
ЗЗЫ: через gcnew выделяют потому что выделение идет в .net-овской куче а не в обычной

Последний раз редактировалось UltimaBeaR; 02.01.2011 в 20:54.
UltimaBeaR вне форума Ответить с цитированием
Старый 02.01.2011, 21:47   #5
ololo-schoolboy
Форумчанин
 
Регистрация: 25.12.2010
Сообщений: 247
По умолчанию

Цитата:
использовать C++/CLI для окошек без особой на то причины смысла мало - код нечитаем сам видешь.
к сожалению других способов пока не нашел
Цитата:
через gcnew выделяют потому что выделение идет в .net-овской куче а не в обычной
но я же могу их удалять с помощью delete
ololo-schoolboy вне форума Ответить с цитированием
Старый 02.01.2011, 22:47   #6
UltimaBeaR
Форумчанин
 
Аватар для UltimaBeaR
 
Регистрация: 21.12.2010
Сообщений: 199
По умолчанию

.net объекты удалять ты не можешь, этим занимается сборщик мусора, когда в проге не остается ссылок (указателей тобишь) на эти объекты. А когда ты пишешь delete для .net ссылки(это хрень с крышечкой ^) то на самом деле никакого удаления не происходит, однако вызывается метод Dispose, если объект наследуется от IDisposable. Читай описалово C++/CLI там про все эти вещи написано (гугл в помощь)
ЗЫ: другие способы это юзать MFC или среды: C++ Builder, QT Creator и тд

Последний раз редактировалось UltimaBeaR; 02.01.2011 в 22:53.
UltimaBeaR вне форума Ответить с цитированием
Старый 03.01.2011, 10:51   #7
ololo-schoolboy
Форумчанин
 
Регистрация: 25.12.2010
Сообщений: 247
По умолчанию

спасибо разобрался
ololo-schoolboy вне форума Ответить с цитированием
Старый 03.01.2011, 15:11   #8
ololo-schoolboy
Форумчанин
 
Регистрация: 25.12.2010
Сообщений: 247
По умолчанию

ой извиняюсь не совсем разобрался зачем нужно arrayOfButtons[i] = gcnew cli::array<System::Windows::Forms:: Button^>(height); в нормальных массивах можно было бы сразу arrayOfButtons[i][j] = gcnew System::Windows::Forms::Button();
ololo-schoolboy вне форума Ответить с цитированием
Старый 03.01.2011, 19:20   #9
UltimaBeaR
Форумчанин
 
Аватар для UltimaBeaR
 
Регистрация: 21.12.2010
Сообщений: 199
По умолчанию

это то же самое что и обычный с++ массивы динамические.
сначала выделяется память под массив указателей на указатель на кнопку
затем выделяется память под каждый из элементов этого массива и каждый элемент это еще 1ин массив равный высоте двумерного массива(height)
вот и получается 2мерный массив указателей на кнопки. дальше просто выделяешь память под каждую кнопку в 2мерном массиве. Просто вместо указателей идут ссылки .net-овские а так все то же самое что и в простом с++
UltimaBeaR вне форума Ответить с цитированием
Старый 03.01.2011, 23:05   #10
ololo-schoolboy
Форумчанин
 
Регистрация: 25.12.2010
Сообщений: 247
По умолчанию

Цитата:
указателей на указатель
а тогда другое дело, получается я не могу создать нормальный массив в котором хранятся ссылки на кнопки, а могу создать только массив ссылок на него так как он создается с помощью нета в нетовской памяти

еще порылся в интернете такой код: cli::array<int, 2> ^ MyArr = gcnew cli::array<int, 2>(5, 5); он работает, но когда я начинаю присвать что либо элементам массива выносит отладчик, а если написать так cli::array<System::Windows::Forms:: Button^, 2> ^arrayOfButtons = gcnew cli::array<System::Windows::Forms:: Button^, 2>(width, height); то его вообще сразу вынесет
ololo-schoolboy вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Массивы в Windows forms levandowskiy Общие вопросы C/C++ 2 20.12.2010 09:33
windows.forms *stRong* Помощь студентам 0 04.06.2010 04:39
Вопрос по Windows Forms tavrocotaps Общие вопросы .NET 0 11.06.2009 16:43