Форум: Форум C++Разное
Новые темы: 00
PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум C++

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Динамическое изменение имени объекта.
 
 автор: EvgenLog   (22.02.2007 в 17:00)   письмо автору
 
 

Здравствуйте.

У меня есть вот такой код (цикл):


InNumCounter = 0;
                while (InNumCounter < InNum-1)
                {
                    SplitStr = test[InNumCounter].Split(new Char[] { '_' });
                    listBox1.Items.Insert(0, SplitStr[1]);
                    InNumCounter++;
                }


При проходе цикла в listBox1 вставляется указанный элемент массива, далее цикл проходит ещё несколько раз и и в этот listBox1 вставляется ещё несколько значений.

Суть в том, что нужно как-то вместе с увеличением InNumCounter увеличивалась и число рядом с listBox. Т.е. нужно сделать так:

1-й проход цикла:

InNumCounter = 0;
                while (InNumCounter < InNum-1)
                {
                    SplitStr = test[InNumCounter].Split(new Char[] { '_' });
                    listBox1.Items.Insert(0, SplitStr[1]);
                    InNumCounter++;
                }


2-й проход цикла:

InNumCounter = 0;
                while (InNumCounter < InNum-1)
                {
                    SplitStr = test[InNumCounter].Split(new Char[] { '_' });
                    listBox2.Items.Insert(0, SplitStr[1]);
                    InNumCounter++;
                }


3-й проход цикла:

InNumCounter = 0;
                while (InNumCounter < InNum-1)
                {
                    SplitStr = test[InNumCounter].Split(new Char[] { '_' });
                    listBox3.Items.Insert(0, SplitStr[1]);
                    InNumCounter++;
                }


Надеюсь такое реализовать можно...

  Ответить  
 
 автор: alex19921992   (22.02.2007 в 17:09)   письмо автору
 
   для: EvgenLog   (22.02.2007 в 17:00)
 

Я думаю, надо создать массив листбоксов, иначе никак.

  Ответить  
 
 автор: EvgenLog   (22.02.2007 в 17:12)   письмо автору
 
   для: alex19921992   (22.02.2007 в 17:09)
 

А это как делается? Примерно...


string [] listBox = new что-то тут...???

  Ответить  
 
 автор: alex19921992   (22.02.2007 в 17:16)   письмо автору
 
   для: EvgenLog   (22.02.2007 в 17:12)
 

Массив наверно делается так:
<имя класса> listbox[5];
вот у вас 5 листбоксов. Тока надо узнать имя класса наверное.

  Ответить  
 
 автор: alex19921992   (22.02.2007 в 17:18)   письмо автору
 
   для: EvgenLog   (22.02.2007 в 17:00)
 

Можно так:

InNumCounter = 0;
while (InNumCounter < InNum-1)
{
SplitStr = test[InNumCounter].Split(new Char[] { '_' });
listBox[InNumCounter].Items.Insert(0, SplitStr[1]);
InNumCounter++;
}
если есть массив листбоксов.

  Ответить  
 
 автор: EvgenLog   (22.02.2007 в 17:24)   письмо автору
 
   для: alex19921992   (22.02.2007 в 17:18)
 

Если есть... Вот только он у меня не получается. Всё красным подчёркивается.

  Ответить  
 
 автор: EvgenLog   (22.02.2007 в 17:31)   письмо автору
 
   для: EvgenLog   (22.02.2007 в 17:24)
 

Всё, разобрался.
Массив из listBox'ов в Visual C создаётся так:



ListBox[] listbox = new ListBox[] { listBox1, listBox2, listBox3 };



listBox1, listBox2 и listBox3 должны быть размещены на форме, перед созданием массива.

Спасибо за помощь, alex19921992!

  Ответить  
 
 автор: EvgenLog   (25.02.2007 в 14:57)   письмо автору
 
   для: EvgenLog   (22.02.2007 в 17:31)
 

И всётаки, хотелось бы ещё узнать...
А как создавать массив из объектов, если их нет на форме. т. например, мне нужно сделать так:

Цикл проходит первый раз - создаётся объект на форме, с соответсвующими параметрами.
Цикл проходит фторой раз - создаётся ещё один объект, с соответсвующими параметрами.

Было бы достаточно привести пример, в котором на форме создавались бы несколько надписей одна под другой.

Спасибо.

  Ответить  
 
 автор: cheops   (25.02.2007 в 16:14)   письмо автору
 
   для: EvgenLog   (25.02.2007 в 14:57)
 

Постараюсь сегодня вечером предоставить пример.

  Ответить  
 
 автор: EvgenLog   (25.02.2007 в 16:42)   письмо автору
 
   для: cheops   (25.02.2007 в 16:14)
 

Спасибо, буду ждать.

  Ответить  
 
 автор: EvgenLog   (25.02.2007 в 20:20)   письмо автору
 
   для: cheops   (25.02.2007 в 16:14)
 

Можно ещё за одно подсказать, как отследить клик по выведенной динамически надписи.

  Ответить  
 
 автор: EvgenLog   (26.02.2007 в 13:10)   письмо автору
 
   для: EvgenLog   (25.02.2007 в 20:20)
 

Ответа так и не последовало.

  Ответить  
 
 автор: cheops   (26.02.2007 в 13:22)   письмо автору
 
   для: EvgenLog   (25.02.2007 в 20:20)
 

Вообще гоовря следует объявить массив элементов управления
    TLabel **lbl;

Для удобства можно ввести новый тип
typedef TLabel* TLabelP;

Выделить под объекты память
  lbl = new TLabelP[4];
  for(int i = 0; i < 4; i++)
  {
    lbl[i] = new TLabel(this);
    lbl[i]->Caption = "Метка" + AnsiString(i);
    lbl[i]->Top = (i + 1)*50;
    lbl[i]->Left = 10;
    lbl[i]->Height = 10;
    lbl[i]->Width = 100;
    lbl[i]->Visible = true;
  }

А при уничтожении формы удалить память
  for(int i = 0; i < 4; i++) delete lbl[i];
  delete [] lbl;

  Ответить  
 
 автор: EvgenLog   (26.02.2007 в 16:13)   письмо автору
 
   для: cheops   (26.02.2007 в 13:22)
 

А это ведь тоже на C++ пример?

  Ответить  
 
 автор: cheops   (27.02.2007 в 12:22)   письмо автору
 
   для: EvgenLog   (26.02.2007 в 16:13)
 

>А это ведь тоже на C++ пример?
Хм... ну, да, тут все примеры на C++ :)))

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования