Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

cli::array

48K
26 ноября 2010 года
CATERPILLAR
36 / / 07.04.2010
Что то я никак не пойму как к указателю
 
Код:
cli::array<ProgressAndLabel^> ^pal;

добавить несколько раз по одному элементу чтобы размер массива увеличивался
297
27 ноября 2010 года
koodeer
1.2K / / 02.05.2009
Никак.

Размер массива cli::array задаётся при его создании. Удаление/добавление элементов невозможно.
Есть метод Resize, позволяющий изменить размер массива, но нужно понимать, что при его применении создаётся новый массив заданного размера, в который копируется содержимое старого массива (то есть это затратная операция). После чего старый массив удаляется сборщиком мусора.

Чтобы не следить самостоятельно за размером массива, можно использовать класс List - в нём можно добавлять и удалять элементы. Выделение памяти под новый массив в случае нехватки размера происходит автоматически.

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


P.S. не могу не понудеть: C++/CLI - мутант, с которого ни в коем случае не стоит начинать освоение программирования. Если пишете под .NET - осваивайте C#. Если есть желание изучить C++, то изучайте нормальный, не дотнетный.
48K
27 ноября 2010 года
CATERPILLAR
36 / / 07.04.2010
Эх спасибо большое, просто я думал что это в array такая фича, забыл про List.
А про C++/CLI ну не знаю, в ВУЗе обучали нас строить окна на сообщениях, муть ужасная, Windows Forms позволяет все построить быстро и удобно...
297
27 ноября 2010 года
koodeer
1.2K / / 02.05.2009
Для Windows Forms лучший выбор - C#.
48K
27 ноября 2010 года
CATERPILLAR
36 / / 07.04.2010
Там я читал отличие в том что в с# нету классов да? Может оно и проще спорить не буду, но если допустим надо переписать ListView и добавить к каждому эллементу ProgressBar на место одного SubItem'а как в uTorrent или нужна многопоточность для полной отдачи процессора и других ресурсов? Что тогда лучше с#? Я спрашиваю потому что реально не знаю...
48K
27 ноября 2010 года
CATERPILLAR
36 / / 07.04.2010
Кстати в чем тут ошибка закралась я не въехал :confused:
stdafx.h
Код:
#pragma once
//#include <Cfgmgr32.h>
#define PROGRESS_STATUS_WAIT    -10
#define PROGRESS_STATUS_CLEAR   -5
using namespace System;
using namespace System::Collections::Generic;
ref class ListViewProgress{
public:
    System::Windows::Forms::ListView ^listview;
    LinkedList<System::Windows::Forms::ListViewItem^> ^lvi;
    LinkedList<System::Windows::Forms::ProgressBar^>^ pb;
    [COLOR="Red"]pb = gcnew LinkedList <System::Windows::Forms::ProgressBar^>;[/COLOR]
    ListViewProgress(System::Windows::Forms::Control::ControlCollection ^control){
        listview = gcnew System::Windows::Forms::ListView();
        listview->Dock = System::Windows::Forms::DockStyle::Fill;
        listview->UseCompatibleStateImageBehavior = false;
        listview->Margin.All=0;
        control->Add(listview);
    };
    void Add (System::String^ name, int image){
        //lvi = gcnew array<System::Windows::Forms::ListViewItem^>(1);
        //lvi[0]=listview->Items->Add(name,image);
        //pal = gcnew array<ProgressAndLabel^>(1);
        //pal[0] = gcnew ProgressAndLabel(listview->Controls);
        //pal[0]->SetLocation(lvi[0]->Bounds);
    };
    void View (int view){
        switch(view){
        case 0:
            listview->View=System::Windows::Forms::View::LargeIcon;
            //WritePrivateProfileString(L"View",L"Icons",L"1",CONFIGFILE);
            break;
        case 1:
            listview->View=System::Windows::Forms::View::SmallIcon;
            //WritePrivateProfileString(L"View",L"Icons",L"2",CONFIGFILE);
            break;
        case 2:
            listview->View=System::Windows::Forms::View::List;
            //WritePrivateProfileString(L"View",L"Icons",L"3",CONFIGFILE);
            break;
        case 3:
            listview->View=System::Windows::Forms::View::Details;
            //WritePrivateProfileString(L"View",L"Icons",L"4",CONFIGFILE);
            break;
        case 4:
            listview->View=System::Windows::Forms::View::Tile;
            //WritePrivateProfileString(L"View",L"Icons",L"5",CONFIGFILE);
            break;
        }
    };
};

На выделенной строчке пишет:
Цитата:
Ошибка 1 error C4430: отсутствует спецификатор типа - предполагается int. Примечание. C++ не поддерживает int по умолчанию d:\документы\visual studio 2008\projects\parallelcopycommander 1.0\parallelcopycommander 1.0\stdafx.h 12 ParallelCopyCommander 1.0
Ошибка 2 error C3845: ListViewProgress:: pb: только статические данные-члены можно инициализировать внутри класс ссылки или типа, передаваемого по значению d:\документы\visual studio 2008\projects\parallelcopycommander 1.0\parallelcopycommander 1.0\stdafx.h 12 ParallelCopyCommander 1.0

48K
27 ноября 2010 года
CATERPILLAR
36 / / 07.04.2010
Все разобрался, нужно было добавлять элемент уже в конструкторе
297
28 ноября 2010 года
koodeer
1.2K / / 02.05.2009
Цитата: CATERPILLAR
Там я читал отличие в том что в с# нету классов да? Может оно и проще спорить не буду, но если допустим надо переписать ListView и добавить к каждому эллементу ProgressBar на место одного SubItem'а как в uTorrent или нужна многопоточность для полной отдачи процессора и других ресурсов? Что тогда лучше с#? Я спрашиваю потому что реально не знаю...



C# - полностью объектно-ориентированный язык. На C++ можно написать программу совсем без классов, в C# как минимум будет один класс (с методом Main).

И C#, и C++.NET используют один и тот же Framework, так что набор стандартных классов одинаковый - Framework Class Library - FCL, он же Base Class Library - BCL. Так что без проблем можно переписать ListView.

Насчёт многопоточности и параллельности. Я слишком плохо знаю C++.NET, но в C# с этим дело обстоит прекрасно! Если не ошибаюсь, Parallel Extensions применимо и к C++.NET, но PLINQ существует только в C#.

В приципе, если нет проблем с английским, то можно найти достаточно документации по C++.NET, но на русском ситуация гораздо хуже. А с литературой по шарпу на русском проблем нет.

Дело ваше, продолжайте мучить цпп. Как надоест выписывать лишние значочки, продираться сквозь неудобный синтаксис и тщетно искать примеры, - добро пожаловать в мир Шарпа :)

5
28 ноября 2010 года
hardcase
4.5K / / 09.08.2005
Цитата: CATERPILLAR
Там я читал отличие в том что в с# нету классов да?

Эммм. Даже сказать-то нечего по этому поводу...

Цитата: CATERPILLAR
допустим надо переписать ListView и добавить к каждому эллементу ProgressBar на место одного SubItem'а как в uTorrent

Я бы WPF брал. Там такой финт тривиален. На WinForms это однозначно займет больше времени реализацию и отнимет еще больше сил на отладку.

Цитата: CATERPILLAR
или нужна многопоточность для полной отдачи процессора и других ресурсов? Что тогда лучше с#? Я спрашиваю потому что реально не знаю...

Нужна абстрактная многопоточность и сферическая отдача ресурсуов? Или что-то конкретное? Если мне не изменяет память, то в Микрософте уже 4 (четыре) фреймворка для работы с многопоточкой сделали - бери не хочу: PLinq, Tasks, Async в F# и еще Axum, а в C#5 грядет жалкое подобие немерлового ComputationExpressions - async/await.

5
28 ноября 2010 года
hardcase
4.5K / / 09.08.2005
Цитата: CATERPILLAR
допустим надо переписать ListView и добавить к каждому эллементу ProgressBar на место одного SubItem'а как в uTorrent



Кстати в uTorrent прогресс-бар отрисовывается (OwnerDraw=true) "врукопашную", там какой-то конкретной компоненты ProgressBar нет.

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог