Перейти к содержанию
Fire Monkey от А до Я
  • 0

Как получить доступ к выбранному элементу и свойствам listbox созданому в run time


Просто Проги

Вопрос

Собственно вопрос всё ещё копаю в сторону listbox сделал такой listbox

  var
listitem:Tlistboxitem;
listimg1:Timage;
listlabel1:Tlabel;
listLayout:Tlayout;
progres:TProgressBar;
but:TSpeedButton;

begin

listitem:=TListBoxItem.Create(ListBox1);

 listitem.Parent:=ListBox1;
 listitem.Height:=50;
  listimg1:=TImage.Create(listitem);
  listimg1.Parent:=listitem;
  listimg1.Width:=50;
  listimg1.Height:=50;
  listimg1.Align:=TAlignLayout.Left;
  listimg1.Bitmap:=Image1.Bitmap;
  //
    but:=TSpeedButton.Create(listitem);
    but.Parent:=listitem;
    but.StyleLookup:='myControl';
    but.Align:=TAlignLayout.Right;

      listLayout:=TLayout.Create(listitem);
      listLayout.Parent:=listitem;
      listLayout.Align:=TAlignLayout.Client;

       listlabel1:=TLabel.Create(listLayout);
       listlabel1.Parent:=listLayout;
       listlabel1.Align:=TAlignLayout.Top;
       listlabel1.Height:=25;
       listlabel1.StyledSettings:=[TStyledSetting.Family,TStyledSetting.Style];
       listlabel1.TextSettings.Font.Size:=12;
       listlabel1.TextSettings.FontColor:=TAlphaColorRec.White;
       listlabel1.Text:='event';
      end;
  finally
      ListBox1.EndUpdate;

как получить доступ к кнопке в созданном listbox ? или хотя бы  как получить текст в  listlabel1 в выбранном item.

поидее должно работать item.selected но что то опять не работает или я туплю)

Изменено пользователем Просто Проги
Ссылка на комментарий

Рекомендуемые сообщения

  • 0
  • Модераторы
10 часов назад, Просто Проги сказал:

как получить доступ к кнопке в созданном listbox ? или хотя бы  как получить текст в  listlabel1 в выбранном item.

 ListBox1.Selected.FindComponent('имя контрола созданного внутри TListBoxItem')

Важно: всем контролам присвоить уникальное имя

Ссылка на комментарий
  • 0

О как а нет примера как им пользоваться, я пишу ListBox1.Selected.FindComponent('listlabel2.text');

Но получаю ошибки ( пробовал читать про это свойство но так и не понял как это должно работать (

Ссылка на комментарий
  • 0
  • Модераторы

на коленке это выглядит так:

if (ListBox1.Selected.FindComponent('Label_name') is TLabel) then
	(ListBox1.Selected.FindComponent('Label_name') as TLabel).Text := 'новый текст';

 

Ссылка на комментарий
  • 0

пусто ошибок нет но и нечего не выводит вообще не понимаю чего не так вот полный код unit

unit Unit1;

interface

uses
  System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants,
  FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs,
  FMX.ListView.Types, FMX.ListView.Appearances, FMX.ListView.Adapters.Base,
  FMX.Controls.Presentation, FMX.StdCtrls, FMX.ListView, System.Rtti,
  System.Bindings.Outputs, Data.Bind.EngExt, Fmx.Bind.DBEngExt, FMX.Layouts,
  FMX.ListBox, Data.Bind.Components, FMX.Objects;

type
  TForm1 = class(TForm)
    Button1: TButton;
    BindingsList1: TBindingsList;
    ListBox1: TListBox;
    Image1: TImage;
    Image2: TImage;
    StyleBook1: TStyleBook;
    SpeedButton1: TSpeedButton;
    Button2: TButton;
    procedure FormActivate(Sender: TObject);
    procedure Button2Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  var
listitem:Tlistboxitem;
listimg1,listimg2:Timage;
listlabel1,listlabel2,listlabel3:Tlabel;
listLayout:Tlayout;
progres:TProgressBar;
but:TSpeedButton;
i:integer;
implementation

{$R *.fmx}

procedure TForm1.Button2Click(Sender: TObject);
var
lbItemSel: TListBoxItem;
var n: Integer;
i:integer;
begin
//Form1.Caption:=ListBox1.ItemIndex.ToString;
//ListBox1.ItemIndex:=ListBox2.ItemIndex;
//  lbItemSel := ListBox1. Selected ;
//  if  ( lbItemSel is TListBoxItem )  then
//  begin

//   Form1.Caption := TListBoxItem.sty
//     listitem ( lbItemSel ).but.caption ;
//     Button2Click(self);

//form1.Caption:=ListBox1.ItemIndex.ToString();
 if (ListBox1.Selected.FindComponent('listlabel1') is Tlabel) then
Form1.Caption:=    (ListBox1.Selected.FindComponent('listlabel1') as Tlabel).Text;
 end;
end;


procedure TForm1.FormActivate(Sender: TObject);

begin

  ListBox1.BeginUpdate;
for I := 0 to 100 do begin

 listitem:=TListBoxItem.Create(ListBox1);

  listitem.Parent:=ListBox1;
  listitem.Height:=80;
  listimg1:=TImage.Create(listitem);
  listimg1.Parent:=listitem;
  listimg1.Width:=50;
  listimg1.Height:=50;
  listimg1.Align:=TAlignLayout.Left;
  listimg1.Bitmap:=Image1.Bitmap;
  listimg1.Margins.Left:=5;
  listimg1.Margins.Top:=5;
  listimg1.Margins.Bottom:=5;
  //
    listimg2:=TImage.Create(listitem);
    listimg2.Parent:=listitem;
    listimg2.Width:=50;
    listimg2.Height:=50;
    listimg2.Align:=TAlignLayout.Right;
 //   progres:=TProgressBar.Create(listitem);
//    progres.Parent:=listitem;
//    progres.Width:=500;
 //   progres.Height:=25;
//    progres.Align:=TAlignLayout.Center;
//    progres.Value:=10;
    //
    but:=TSpeedButton.Create(listitem);
    but.Parent:=listitem;
    but.StyleLookup:='pausebutton';
    but.Width:=50;
    but.Height:=50;
    but.Margins.Right:=10;
    but.Align:=TAlignLayout.Right;
    but.OnClick := Button2Click;

      listLayout:=TLayout.Create(listitem);
      listLayout.Parent:=listitem;
      listLayout.Align:=TAlignLayout.Client;

       listlabel1:=TLabel.Create(listLayout);
       listlabel1.Parent:=listLayout;
       listlabel1.Align:=TAlignLayout.Top;
       listlabel1.Height:=25;
       listlabel1.StyledSettings:=[TStyledSetting.Family,TStyledSetting.Style];
       listlabel1.TextSettings.Font.Size:=12;
       listlabel1.TextSettings.FontColor:=TAlphaColorRec.White;
       listlabel1.Text:=IntToStr(Random(100));

       listlabel2:=TLabel.Create(listLayout);
       listlabel2.Parent:=listLayout;
       listlabel2.Align:=TAlignLayout.Top;
       listlabel2.Height:=25;
       listlabel2.StyledSettings:=[TStyledSetting.Family,TStyledSetting.Style];
       listlabel2.TextSettings.Font.Size:=10;
       listlabel2.TextSettings.FontColor:=TAlphaColorRec.Gray;
       listlabel2.Text:='00:00';

       listlabel3:=TLabel.Create(listLayout);
       listlabel3.Parent:=listLayout;
       listlabel3.Align:=TAlignLayout.Top;
       listlabel3.Height:=25;
       listlabel3.StyledSettings:=[TStyledSetting.Family,TStyledSetting.Style];
       listlabel3.TextSettings.Font.Size:=15;
       listlabel3.TextSettings.FontColor:=TAlphaColorRec.Gray;
       listlabel3.Text:='00:00';
     //  listlabel2.Visible:=false;

      ListBox1.EndUpdate;

end;
end;

 

end.

 

Ссылка на комментарий
  • 0
  • Модераторы
Только что, Просто Проги сказал:

я делал так всёравно нечего не находит listlabel1.Name:='control1' ;

и в FindComponent писали control1?

Ссылка на комментарий
  • 0
  • Модераторы

procedure TForm1.Button1Click(Sender: TObject);
var
  AItem: TListBoxItem;
  ALabel: TLabel;
  i: integer;
begin
  ListBox1.BeginUpdate;
  for i := 0 to 100 do
  begin
    AItem := TListBoxItem.Create(ListBox1);
    AItem.Parent := ListBox1;
    AItem.Height := 80;

    ALabel := TLabel.Create(AItem); // все контролы должны принадлежать AItem
    ALabel.Parent := AItem; // а parent может быть другим
    ALabel.Align := TAlignLayout.Top;
    ALabel.Height := 25;
    ALabel.Name := 'ALabelName' + Inttostr(i);
    ALabel.StyledSettings := [TStyledSetting.Family, TStyledSetting.Style];
    ALabel.TextSettings.Font.Size := 20;
    ALabel.TextSettings.FontColor := TAlphaColorRec.Black;
    ALabel.Text := Inttostr(Random(100));
  end;
  ListBox1.EndUpdate;
end;

procedure TForm1.ListBox1ItemClick(const Sender: TCustomListBox; const Item: TListBoxItem);
begin
  if (Item.FindComponent('ALabelName' + Inttostr(Item.Index)) is TLabel) then
    Caption := (Item.FindComponent('ALabelName' + Inttostr(Item.Index)) as TLabel).Text;
end;

 

Ссылка на комментарий
  • 0
  • Модераторы

читайте внимательно код, это относится ко всем контролам

ALabel := TLabel.Create(AItem); // все контролы должны принадлежать AItem
ALabel.Parent := AItem; // а parent может быть другим

 

Ссылка на комментарий

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить на вопрос...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...