|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
02.01.2011, 15:26 | #1 |
Форумчанин
Регистрация: 25.12.2010
Сообщений: 247
|
коллекция елементов windows forms
Хочу сделать что нибудь типа Button ^ battonArr[size][size]; Как это делается?
|
02.01.2011, 18:19 | #2 |
Форумчанин
Регистрация: 21.12.2010
Сообщений: 199
|
ну так и делается наверно, если так ругается то можно попробовать использовать .net-овский массив
System::Array<Button^> ^arrayOfButtons; ну или если двумерный то так наверно System::Array<System::Array<Button^ > ^> ^arrayOfButtons; ну и потом выделяешь память под массивы через gcnew |
02.01.2011, 19:35 | #3 |
Форумчанин
Регистрация: 25.12.2010
Сообщений: 247
|
так тоже не получается, попробовал так: cli::array<cli::array<Button ^, size> ^, size> ^ buttonsArr; вроде ошибок нет тока как с этим работать ума не приложу, да еще почему нельзя выделять память просто new, до этого думал что всегда выделяют gcnew из-за того что следить в падлу
|
02.01.2011, 20:45 | #4 |
Форумчанин
Регистрация: 21.12.2010
Сообщений: 199
|
Да действительно не System::Array а cli::array но смысл от этого не меняется.
Код:
ЗЫ: использовать C++/CLI для окошек без особой на то причины смысла мало - код нечитаем сам видешь. Учи C# - он очень похож по синтаксису ЗЗЫ: через gcnew выделяют потому что выделение идет в .net-овской куче а не в обычной Последний раз редактировалось UltimaBeaR; 02.01.2011 в 20:54. |
02.01.2011, 21:47 | #5 | ||
Форумчанин
Регистрация: 25.12.2010
Сообщений: 247
|
Цитата:
Цитата:
|
||
02.01.2011, 22:47 | #6 |
Форумчанин
Регистрация: 21.12.2010
Сообщений: 199
|
.net объекты удалять ты не можешь, этим занимается сборщик мусора, когда в проге не остается ссылок (указателей тобишь) на эти объекты. А когда ты пишешь delete для .net ссылки(это хрень с крышечкой ^) то на самом деле никакого удаления не происходит, однако вызывается метод Dispose, если объект наследуется от IDisposable. Читай описалово C++/CLI там про все эти вещи написано (гугл в помощь)
ЗЫ: другие способы это юзать MFC или среды: C++ Builder, QT Creator и тд Последний раз редактировалось UltimaBeaR; 02.01.2011 в 22:53. |
03.01.2011, 10:51 | #7 |
Форумчанин
Регистрация: 25.12.2010
Сообщений: 247
|
спасибо разобрался
|
03.01.2011, 15:11 | #8 |
Форумчанин
Регистрация: 25.12.2010
Сообщений: 247
|
ой извиняюсь не совсем разобрался зачем нужно arrayOfButtons[i] = gcnew cli::array<System::Windows::Forms:: Button^>(height); в нормальных массивах можно было бы сразу arrayOfButtons[i][j] = gcnew System::Windows::Forms::Button();
|
03.01.2011, 19:20 | #9 |
Форумчанин
Регистрация: 21.12.2010
Сообщений: 199
|
это то же самое что и обычный с++ массивы динамические.
сначала выделяется память под массив указателей на указатель на кнопку затем выделяется память под каждый из элементов этого массива и каждый элемент это еще 1ин массив равный высоте двумерного массива(height) вот и получается 2мерный массив указателей на кнопки. дальше просто выделяешь память под каждую кнопку в 2мерном массиве. Просто вместо указателей идут ссылки .net-овские а так все то же самое что и в простом с++ |
03.01.2011, 23:05 | #10 | |
Форумчанин
Регистрация: 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); то его вообще сразу вынесет |
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Массивы в 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 |