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

How to display / Select only one TListViewItem from "OnItemClick" event?


Legit Coder

Вопрос

У меня есть приложение с 2 TLabels, 1 TListView. Я хотел бы отобразить значение или (текст) содержимое TListViewItem внутри тегов TLabels образом, чтобы содержимое первой метки не могло быть одинаковым.

Мой код :

 

....
  ListView1: TListView;
  Base: TLabel;
  Hypo: TLabel;
....

procedure TMainForm.BaseClick(Sender: TObject);
begin
   ListView1.Visible := True;
end;

procedure TMainForm.HypoClick(Sender: TObject);
begin
   ListView1.Visible := True;
end;    

procedure TMainForm.ListView1ItemClick(const Sender: TObject;
   const AItem: TListViewItem);
begin
   if Assigned(ListView1.Selected) then
	begin
      Base.Text := TListViewItem(ListView1.Selected).Text;
    end else
      Hypo.Text := TListViewItem(ListView1.Selected).Text;
   
   ListView1.Visible := False;
end;

на изображении я хочу, чтобы XAG выделялся, когда я нажимаю на 1-ю TLabel, а другое значение также выбиралось как XAF, например, когда я нажимаю на 2-ю TLabel.

WfYA7.png

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

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

  • 0

а представьте, что нет никаких Label или ListView
а есть три переменных. в одной значение, в двух других - что-то там чтоб не повторялось

это можете написать?

Ссылка на комментарий
  • 0
Something like that ? что-то в этом роде?

procedure TForm3.ListView1ItemClick(const Sender: TObject;
  const AItem: TListViewItem);
var elvitem : TListViewItem;
    i,n : integer;
begin
  n:=0;
  for i:=0 to ListView1.ItemCount-1 do
  begin
     if ListView1.Items[i].Purpose=TListItemPurpose.None then // it's an item 
     begin
        if ListView1.Items[i].Checked then
        begin
          inc(n);
          case n of
            1 : base.text:=ListView1.Items[i].Text;
            2 : begin
                  hypo.text:=ListView1.Items[i].Text;
                  break; // don't search more
                end;
          end;
        end;
      end;
  end;
end;

 

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

нет.

никто понятия не имеет, что и как и правильно ли у вас отображается. может у вас ошибки в совсем других местах

"Я хотел бы отобразить значение или (текст) содержимое TListViewItem внутри тегов TLabels образом, чтобы содержимое первой метки не могло быть одинаковым." Одинаковым с чем??

перечитаем задачу. Даже если посмотреть на картинки и ваш код, ничего не понятно.

Кликнуть вы можете по одной строке ListView. Допустим, текст, который в этой строке, вы хотите разместить в Label1. А откуда берется текст в Label2 ???
Если текст1 = 'XYZ' то добавьте к нему A и в Label2 запишите 'XYZA'. Вполне совпадает с заданным вами условием.

Попробуйте еще раз, на общечеловеческом языке объяснить, чего вы хотели-то ?

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

хорошо, как я уже говорил в начале, У меня есть приложение с 2 TLabels, 1 TListView

1. Когда я нажимаю на 1-й TLabel, я выбираю text в TListView и сохраняю его во 2-м TLabel.

2. Когда я нажимаю на 2-й TLabel, я выбираю другой текст, отличный от 1-го, в же TListView, и он сохраняется во 2-м TLabel.

Sorry for my bad Russian. извините за мой плохой русский язык

Ссылка на комментарий
  • 0
В 19.07.2022 в 14:27, krapotkin сказал:

Кликнуть вы можете по одной строке ListView. Допустим, текст, который в этой строке, вы хотите разместить в Label1. А откуда берется текст в Label2 ???

в же TListView

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

я не знаю, откуда вы берете текст, который размещается в ListView но он же должен где-то храниться
вот оттуда его берём в методе UpdateLabels
 

TForm3 = class(TForm)
...
SelectedList : TList<integer>;
...
end;

........

procedure TForm3.FormCreate(Sender : TObject);
begin
  SelectedList := TList<integer>.Create;
end;

procedure TForm3.FormDestroy(Sender : TObject);
begin
  FreeAndNil(SelectedList);
end;

procedure TForm3.ListView1ItemClick(const Sender: TObject; const AItem: TListViewItem);
begin
  if SelectedList.Count = 2 then exit;
  case Selected Count of
    0 : begin
      SelectedList.Add(AItem.Index);
      UpdateLabels();
    end;
    1 : begin
      if SelectedList[0] <> AItem.Index then
        SelectedList.Add(AItem.Index);
      UpdateLabels();
    end;
  end;
end;

procedure TForm3.UpdateLabels();
begin
  if SelectedList.Count > 0 then
    label1.text := varIDontKnowWhereYourTextStored[ SelectedList[0] ]
  else 
    label1.text := '';

  if SelectedList.Count > 1 then
    label2.text := varIDontKnowWhereYourTextStored[ SelectedList[1] ]
  else 
    label2.text := ''; 
end;

 

Ссылка на комментарий
  • 0
5 часов назад, krapotkin сказал:

я не знаю, откуда вы берете текст, который размещается в ListView но он же должен где-то храниться
вот оттуда его берём в методе UpdateLabels

TListView заполняется из API, и я делаю livebindingshttps://api.apilayer.com/exchangerates_data/symbols

NB: я использую Delphi 11 и Firemonkey

 

 

Изменено пользователем Legit Coder
Ссылка на комментарий
  • 0

Я не использую liveBindings в проектах, потому что не люблю, когда нет никакого контроля, только какая-то магия.

Но никто не мешает вам как и раньше брать текст из ListViewItem

Label1.text := ListView ListItems[SelectedList[1]].Text

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

После того, как выбор сделан, что мне делать, если я хочу измениться и выбрать другое значение? в пределах 2 TLabel?

Изменено пользователем Legit Coder
Ссылка на комментарий
  • 0

Это называется UX - сценарий использования пользователем вашей программы.
Собственно, сначала придумывается из головы UX, а только потом пишется программа. Так что это к вам вопрос - что делать с уже введенными данными

С точки зрения программирования нужно всего лишь
 

SelectedList.Clear();
UpdateLabels();

 

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

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

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

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

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

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

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

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

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

  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
×
×
  • Создать...