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