Запись в label1 , как записать ?

Статус
В этой теме нельзя размещать новые ответы.

disker

Гуру форума
Регистрация
28 Авг 2007
Сообщения
626
Реакции
67
Имеется одномерный массив из 600 чисел (числа загружаются из файла, числа от 0 до 38) . На форме расположены 600 label - ов. Как записать эти все числа из одномерного массива в эти label - ы ? Первое число из массива к примеру a [1] в label1 , второе a[2] в label2 и т.д. Уже целый вечер сижу ничего не получается :( Понимаю, что вопрос ламерский, но я первый раз на с++ пытаюсь программировать :( o_O :att:

Подозреваю что перед записью нужно скорее всего произвести конвертацию, а вот как это записать чтобы было правильно , не знаю :(

Может кому пригодится - нашел вот такой ответ наконец-то :

Код:
 label1->Text = Convert::ToString(a[1]);

Пока вроде фурычит :)

antiterror спасибо, ты прав, пока работает. Но что-то уже перестает мне нравиться. Я пользуюсь компилятором от мелкомягких и вот он очень сильно подвисает когда сохраняешь проект или меняешь свойство какого-нибудь labela (до 2-3 минут и это не на слабом ПК :( ) , а у меня их как можешь заметить целых 600 (может потому, что так много и подвисает). Вот подумываю чем-то их заменить, но не знаю какую альтернативу выбрать. Тут в соседней теме советовали мне заменить label на TcxGrid , но пока не разобрался как там обращаться к ячейкам и как записывать в них значения к примеру с того же массива.. иду курить гугл... :)

немного погорячился я с тем, что всё работает :( По ходу тестирования возникла небольшая проблемка: среди записываемых и выводимых данных присутствуют такие числа как "0" и "00" и мне нужно их различать. А комп не умеет - для него это одинаковые числа. Может кто знает как их различить ? Подозреваю что им нужно присвоить символьный тип или что-то похожее, присваиваю им тип char , но при выводе в label выводятся совсем другие числа :( К примеру там где должно быть "00" комп выводит в label "50" а там, где "0" - выводится тоже 50... В общем ай нид хелп :) ... плиз )))
 
Последнее редактирование модератором:
Надо сделать динамический вывод label ов...
Код:
TLabel *label[600];
for (i=0;i<600;i++)
  {
  label[i]=new TLabel(Application);
  label[i]->Parent=Form1; //имя формы
  label[i]->Caption=IntToStr(a[i]);
  label[i]->Left=1;
  label[i]->Top=1;
  label[i]->Font->Size=12;
  label[i]->BringToFront();
  label[i]->Show();
  }
Попробуйте...
 
Forza.Baron 32 ошибки выдает, но это уже не важно.. я наверно всё же буду использовать TcxGrid :)
 
o_O 600 лейблов... Не делай так никогда! даже не хочу кататать полотно из 15 пуктов почему. Нельзя так и все тут!
 
Нельзя так и все тут!
на 600 страниц не надо, но 2-3 предложения не помешали бы мне :) . Просто визуально они мне больше нравятся, чем к примеру аналоги (тот же TcxGrid или dataGridWiev), но так как это 600 записей в программе о параметрах, размещении (позиции) и т.д. , то понятно что это всё дело будет мне грузить компилятор, вот поэтому и пришлось отказаться, хотя они мне и больше нравятся...
 
советую создавать лэйблы динамически и после этого присваивать им нужные свойства, гугль расскажет)
 
2-3 предложения (все они касаются если делаешь прогу не только себе... гы себе то какая разница как затупливать будет главное чтоб сделала)
без димагогий на высокие темы
1) не создавать кучу компонетов, даже динамически. Проблемы 1) расход памяти; 2) при изменении свойств нескольких компонентов в течении секунды - процу поплохеет
2) .net вещь в себе - рандомные глюки могут запросто появится

Предложение: если не хочешь гриды юзать возьми TextBox создай в нем 1200 строк и через 1 напиши свой текст
делаем alClient цвет карячневый (как на форме), бардюры убрать и ридонли. Визуально тоже самое
 
да, а можно просто создать один единственный label, и записывать значения...

вот код, на форме 5 label'ов, 1 button и 2 трекбара:
Код:
procedure TForm1.btn1Click(Sender: TObject);
var i,j:Integer;
    s:string;
begin
  lbl1.Caption := ''; //сбрасываем значение
  for i := 1 to 25 do begin //25 строк
  lbl1.Caption := lbl1.Caption + #13; //символ переноса
    for j := 1 to 24 do begin //по 24 столбика
        s := FloatToStr(Random(100)); //случайное число
        if Length(s) < 3 then s := '0' + s;  // прошу прощения за кривой код
        if Length(s) < 3 then s := '0' + s;  // тут мы выравниваем до 3х символов
        lbl1.Caption := lbl1.Caption + ' - ' + s; //добовляем к label (тут "-" знак для дальнейшего поиска нужного значения)
    end;
  end;
end;
 
procedure TForm1.trckbr1Change(Sender: TObject);
var i,k:Integer;
begin
lbl3.Caption := IntToStr(trckbr1.Position); //показываем номер столбца
lbl4.Caption := IntToStr(trckbr2.Position); //показываем номер строки
for i := 0 to Length(lbl1.Caption) do begin  //цикл по всей строке
  if Copy(lbl1.Caption,i,1) = '-' then k := k + 1;  //считаем каждый спец-символ
  if k = ((trckbr2.Position-1)*24 + trckbr1.Position)-1
  then lbl5.Caption := Copy(lbl1.Caption,i+3,3); //показываем требуемый символ
 
end;
 
end;
 
Имеется одномерный массив из 600 чисел (числа загружаются из файла, числа от 0 до 38) . На форме расположены 600 label - ов. Как записать эти все числа из одномерного массива в эти label - ы ? Первое число из массива к примеру a [1] в label1 , второе a[2] в label2 и т.д. Уже целый вечер сижу ничего не получается :( Понимаю, что вопрос ламерский, но я первый раз на с++ пытаюсь программировать :( o_O :att:

Добрый день, вот набросал пример - разработано и проверено на C++Builder 2010, так что рабочий 100%. Чтение из файла не показывал, просто заменил инициализацию массива случайными числами, но сама суть осталась неизменной. (Примечание: имя главной формы Form1 - при необходимости измени его в примере) Держи:

int array[600]; // Массив из 600 элементов
// это вместо чтения из файла
// заполнение массива случайными числами
for(int i=0; i<600; i++)
array=random(38);

// Создание динамического массива TLabel
TLabel *Lab[600];
for(int j=0; j<600; j++)
{
// Динамическое создание компонентов
Lab[j] = new TLabel(this);
// Присвоение уникального имени
Lab[j]->Name = "Label"+IntToStr(j);
// Указание родителя
Lab[j]->Parent = Form1;
// Задание размеров компонентов
Lab[j]->Width = 20;
Lab[j]->Top = 20;
// Смещение компонентов вниз
Lab[j]->Left = 20;
Lab[j]->Top += 20*j;
// Запись значений в компоненты из массива
Lab[j]->Caption = array[j];
// Отображение компонентов
Lab[j]->Show();
}

Если будут вопросы, рад буду видеть на своём сайте: cbuilder.inf.ua
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху