【问题标题】:OnClick event for on listbox strings [closed]列表框字符串上的 OnClick 事件[关闭]
【发布时间】:2013-03-18 21:05:33
【问题描述】:

我想将 ListBox 中的字符串转换为事件。就像我有一个显示“Image5”的字符串一样,我想在我的过程中获取 Image5.Click 事件。有可能吗?

【问题讨论】:

  • 那行没有填满列表框;它读取当前选定的项目。总之,不清楚你想要什么。
  • 听起来你的问题太基本或太初级,除了你之外对任何人都没有任何用处。如果你不能调用一个函数并且你不知道如何调用一个函数,那听起来你需要一个 Delphi 教程,而不是堆栈溢出。
  • 也许我没有很好地解释我的问题。我想将一个字符串(来自 ListBox)转换为一个事件。就像我有一个显示“Image5”的字符串一样,我想获得 Image5.Click;在我的程序上。
  • @DK64 您不能为特定项目设置 oOnClick,但您确实知道列表框的 onclick 事件中的选定项目。请记住,OnClick 事件会在所选项目发生更改后触发。
  • Selected := ListBox1.Items[ListBox1.ItemIndex]; 将是正确的方法。 (StringsTStrings 后代的默认属性,因此可以省略。使用称为SLTStringList,您可以通过使用SL[index] 而不是SL.Strings[index] 来访问单个Strings。您的问题非常不清楚,但如果您的最后一条评论更好地解释了它,那么您应该 edit 您的问题改为提出问题,并通过编辑而不是将其放入人们可能看不到的 cmets 中。

标签: delphi


【解决方案1】:

如果我正确理解您的问题,如果列表框中的所有组件都是同一类型(例如,TImage),则类似这样的事情应该可以工作(这是ListBox 的双击处理程序):

procedure TForm1.ListBox1DblClick(Sender: TObject);
var
  Image: TImage;
  Selected: string;
begin
  if ListBox1.ItemIndex = -1 then
    Exit;
  Selected := ListBox1.Items[ListBox1.ItemIndex];
  Image := FindComponent(Selected) as TImage;
  if Assigned(Image) then
    if Assigned(Image.OnClick) then
      // You can access Image.OnClick here. In this case, I'll
      // just call it directly with a nil Sender parameter.
      Image.OnClick(nil);
end;

如果您只想致电Image.OnClick,您可以更直接地进行操作(正如大卫在他对我的回答的评论中提到的那样):

if Assigned(Image) then
  Image.Click;    // Automatically calls OnClick if assigned

【讨论】:

  • if Assigned(Image.OnClick) then 不需要,因为 Click 方法也可以做到这一点。
  • 是的,这正是我需要的,非常感谢。
  • @David:我发现了这一点,但后来想到直接调用OnClick 可能是一个更好的主意,所以我改变了这个例子。不过,感谢您的捕获。固定为包括两者,因为不清楚发帖人在问什么。
  • 我总是更喜欢使用控件的Click 方法。它将通过适当的Sender 作为开始。我觉得它更干净了。
  • 除非您想发送不同的Sender。 :-) 但你是对的;在大多数情况下,它更干净。
猜你喜欢
  • 2019-03-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-10-28
  • 2020-01-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多