【问题标题】:Firemonkey TListBox.OnClick - which item is clicked?Firemonkey TListBox.OnClick - 点击了哪个项目?
【发布时间】:2018-02-15 18:05:29
【问题描述】:

Delphi 10.2.2 移动版

从一个空白的移动项目开始,我在表单上放置了一个 TListBox。我添加了两个 TListBoxItems。

procedure TForm1.ListBox1Click(Sender: TObject);
begin
  ShowMessage('ListBoxItem.itemindex = ' + ListBox1.ItemIndex.ToString);
end;

当我在 Windows 和 Macintosh 中单击第一个项目时,OnClick() 正确报告已单击项目索引 0。

当我单击移动设备(iOS 和 Android)中的第一个项目时,OnClick() 将项目索引报告为 -1(而不是应有的 0)。然后它继续突出显示第一项。

如果我随后单击移动设备中的第二个项目,则 OnClick() 将项目索引报告为 0(而不是应有的 1)。然后它继续突出显示第二项。

在移动设备上单击 TListBox 时如何在 OnClick() 中获取正确的项目?

【问题讨论】:

  • 这闻起来像是应该向 Emba 报告的错误。
  • 尽管有错误:使用 OnItemClick 有问题吗?
  • 只需使用 OnChange 事件,它会传递选择/单击的项目,并在 ItemIndex 更新后调用。
  • OnItemClick 存在问题,即使在列表已清空并替换为新选择后,它仍会突出显示项目。

标签: delphi firemonkey tlistbox


【解决方案1】:

显然OnClick 事件在ItemIndex 更新之前被触发。因此,您将不得不延迟处理,直到ItemIndex 有机会首先更新。你可以:

  • 使用TThread.ForceQueue()(仅限10.2 Tokyo+):

    procedure TForm1.ListBox1Click(Sender: TObject);
    begin
      TThread.ForceQueue(nil,
        procedure
        begin
          ShowMessage('ListBoxItem.itemindex = ' + ListBox1.ItemIndex.ToString);
        end
      );
    end;
    
  • 使用TThread.Queue():

    procedure TForm1.ListBox1Click(Sender: TObject);
    begin
      TThread.CreateAnonymousThread(
        procedure
        begin
          TThread.Queue(nil,
            procedure
            begin
              ShowMessage('ListBoxItem.itemindex = ' + ListBox1.ItemIndex.ToString);
            end
          );
        end
      ).Start;
    end;
    
  • 使用短计时器:

    procedure TForm1.ListBox1Click(Sender: TObject);
    begin
      Timer1.Enabled := True;
    end;
    
    procedure TForm1.Timer1Timer(Sender: TObject);
    begin
      Timer1.Enabled := False;
      ShowMessage('ListBoxItem.itemindex = ' + ListBox1.ItemIndex.ToString);
    end;
    

【讨论】:

  • 我希望有一种方法可以查看即将分配给 ItemIndex 的值,但计时器方法运行良好。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-12-02
  • 1970-01-01
  • 1970-01-01
  • 2014-09-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多