Delphi 列表框字符串上的OnClick事件

Delphi 列表框字符串上的OnClick事件,delphi,Delphi,我想将列表框中的字符串转换为事件。比如,如果我有一个写着“Image5”的字符串,我想得到Image5.Click事件在我的过程中。有可能吗?如果我正确理解了您的问题,如果列表框中的所有组件都是相同类型的(例如,TImage),那么类似的操作应该会起作用(这是列表框的双击处理程序): 如果您只想调用Image.OnClick,那么您可以更直接地调用它(正如David在对我的答案的评论中提到的): 该行不会填充列表框;它读取当前选定的项目。不管怎样,你想要什么还不清楚。听起来你的问题太基本了,除了

我想将列表框中的字符串转换为事件。比如,如果我有一个写着“Image5”的字符串,我想得到Image5.Click事件在我的过程中。有可能吗?

如果我正确理解了您的问题,如果列表框中的所有组件都是相同类型的(例如,
TImage
),那么类似的操作应该会起作用(这是
列表框的双击处理程序):

如果您只想调用
Image.OnClick
,那么您可以更直接地调用它(正如David在对我的答案的评论中提到的):


该行不会填充列表框;它读取当前选定的项目。不管怎样,你想要什么还不清楚。听起来你的问题太基本了,除了你之外,对任何人都没有任何用处。如果你不能调用函数,也不知道如何调用函数,那听起来你需要一个关于Delphi的教程,而不是堆栈溢出。也许我没有很好地解释我的问题。我想将字符串(从列表框)转换为事件。如果我有一个字符串,上面写着“Image5”,我想得到Image5;在我的过程中,@DK64您不能单击特定项,但您知道列表框的onclick事件中的选定项。记住,OnClick事件在所选项目发生更改后激发。
selected:=ListBox1.Items[ListBox1.ItemIndex]将是正确的方法。(
Strings
TStrings
子体的默认属性,因此可以省略它。使用名为
SL
TStringList
,只需使用
SL[index]
而不是
SL.Strings[index]即可访问单个
字符串
。您的问题非常不清楚,但如果您的最后一条评论能够更好地解释问题,那么您应该将您的问题改为提问,并通过编辑而不是将其放在人们可能看不到的评论中进行编辑。
如果指定(Image.OnClick)然后不需要
,因为单击
方法也会这样做。是的,这就是我需要的,非常感谢。@David:我知道了,但后来想直接调用
OnClick
可能是个更好的主意,所以我更改了示例。不过,谢谢你的捕获。修复了这两种方法,因为不清楚海报是什么sking。我总是更喜欢使用控件的
单击
方法。它会首先传递一个合适的
发送者
。我觉得它更干净。除非你想发送另一个
发送者
:-),但你是对的;在大多数情况下,它更干净。
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;
if Assigned(Image) then
  Image.Click;    // Automatically calls OnClick if assigned