了解delphi事件处理程序中的sender参数

参数“Sender”引用了用于调用该方法的控件。如果单击Button1控件,导致调用Button1Click方法,则指向Button1对象的引用或指针将传递给名为Sender的参数中的Button1Click。...

事件处理程序和发送方

A women helps a coworker procedure TForm1.Button1Click(Sender: TObject) ; begin ... end; Button1Click OnClick event

参数“Sender”引用了用于调用该方法的控件。如果单击Button1控件,导致调用Button1Click方法,则指向Button1对象的引用或指针将传递给名为Sender的参数中的Button1Click。

让我们分享一些代码

例如,假设我们想要一个按钮和一个菜单项做同样的事情。必须编写两次相同的事件处理程序是愚蠢的。

要在Delphi中共享事件处理程序,请执行以下操作:

  1. 为第一个对象编写事件处理程序(例如,速度栏上的按钮)
  2. 选择一个或多个新对象-是,两个以上的对象可以共享(例如MenuItem1)
  3. 转到对象检查器上的事件页面。
  4. 单击事件旁边的向下箭头以打开以前编写的事件处理程序列表。(Delphi将为您提供表单上存在的所有兼容事件处理程序的列表)
  5. 从下拉列表中选择事件。(例如,按钮1单击)
OnClick procedure TForm1.Button1Click(Sender: TObject) ; begin {code for both a button and a menu item} ... {some specific code:} if Sender = Button1 then ShowMessage('Button1 clicked!') else if Sender = MenuItem1 then ShowMessage('MenuItem1 clicked!') else ShowMessage('??? clicked!') ; end;

注意:if-then-else语句中的第二个else处理Button1和MenuItem1都没有引起事件的情况。但是,你可以问,还有谁会给处理者打电话。试试这个(你需要第二个按钮:Button2):

procedure TForm1.Button2Click(Sender: TObject) ; begin Button1Click(Button2) ; {this will result in: '??? clicked!'} end;

是和作为

if Sender is TButton then DoSomething else DoSomethingElse; Edit box procedure TForm1.Edit1Exit(Sender: TObject) ; begin Button1Click(Edit1) ; end; {... else} begin if Sender is TButton then ShowMessage('Some other button triggered this event!') else if Sender is TEdit then with Sender as TEdit do begin Text := 'Edit1Exit has happened'; Width := Width * 2; Height := Height * 2; end {begin with} end;

结论

正如我们所看到的,Sender参数在正确使用时非常有用。假设我们有一堆共享同一事件处理程序的编辑框和标签。如果我们想找出是谁触发了事件并采取行动,我们必须处理对象变量。但是,让我们把这个留到其他场合。

  • 发表于 2021-09-15 03:58
  • 阅读 ( 189 )
  • 分类:IT

你可能感兴趣的文章

如何在dbgrid中使用复选框(use checkboxes in a dbgrid)

在Delphi中定制DBGrid的输出有很多方法和理由。一种方法是添加复选框,使结果在视觉上更具吸引力。 默认情况下,如果数据集中有布尔字段,DBGrid会根据数据字段的值将其显示为“True”或“False”。但是,如果选择使用“true...

  • 发布于 2021-09-04 07:22
  • 阅读 ( 156 )

将项目添加到tpopup delphi菜单

在Delphi应用程序中使用菜单或弹出菜单时,在大多数情况下,都是在设计时创建菜单项的。每个菜单项都由一个TMenuItem Delphi类表示。当用户选择(单击)一个项目时,OnClick事件将被触发,以供您(作为开发人员)获取该事件并...

  • 发布于 2021-09-06 15:10
  • 阅读 ( 166 )

delphi中的sql

...形式,允许您选择、插入、更新、查找数据位置等。 delphi中的tquery 如果要在应用程序中使用SQL,您将非常熟悉TQuery组件。Delphi使您的应用程序能够通过TQuery组件直接使用SQL语法来访问Paradox和dBase表(使用本地SQL—ANSI标准SQL...

  • 发布于 2021-09-08 10:40
  • 阅读 ( 187 )

如何在运行时移动和调整控件大小(在delphi应用程序中)(move and resize controls at run time (in delphi applications))

...如何在应用程序运行时使用鼠标拖动和调整控件大小(在Delphi窗体上)。 运行时的表单编辑器 在窗体上放置控件(可视组件)后,可以调整其位置、大小和其他设计时特性。但是,在某些情况下,您必须允许应用程序的用...

  • 发布于 2021-09-10 20:45
  • 阅读 ( 195 )

在delphi的tdbgrid中显示和编辑备注字段

...德 备注字段用于表示长文本或文本与数字的组合。使用Delphi构建数据库应用程序时,TMemoField对象用于表示数据集中的备注字段。TMemoField封装了包含文本数据或任意长度的字段的基本行为。在大多数数据库中,备注字段的大小受...

  • 发布于 2021-09-10 20:47
  • 阅读 ( 166 )

如何将复选框和单选按钮添加到ttreeview(add check boxes and radio buttons to a ttreeview)

TTreeView Delphi组件(位于“Win32”组件选项板选项卡上)表示一个窗口,显示项目的层次列表,例如文档中的标题、索引中的条目或磁盘上的文件和目录。 带有复选框或单选按钮的树节点? Delphi的TTreeview本机不支持复选框,...

  • 发布于 2021-09-10 22:15
  • 阅读 ( 177 )

如何将下拉选择列表放置到dbgrid中(place a drop down pick list into a dbgrid)

...在Delphi的DBGrid中显示查找字段的选项是什么,现在是时候了解如何使用DGBrid列的PickList属性,使用户能够从下拉列表框中为查找字段选择值了。 关于dbgrid columns属性的快速信息 DBGrid控件具有Columns属性—表示网格控件中所有列...

  • 发布于 2021-09-10 22:19
  • 阅读 ( 204 )

如何自定义dbnavigator(customize the dbnavigator)

... 此查询来自一位正在寻找增强DBNavigator组件功能的方法的Delphi开发人员。 DBNavigator是一个很好的组件,它提供了一个类似VCR的界面,用于在数据库应用程序中导航数据和管理记录。记录导航由第一个、下一个、上一个和最后一...

  • 发布于 2021-09-10 22:21
  • 阅读 ( 218 )

如何delphidbgrid中的记录排序(sort records in delphi dbgrid)

...知应用程序,那么您可能每天都在使用它。下面,我们将了解如何向您的数据库应用程序中添加更多用户肯定会喜欢的功能。 按照《Delphi数据库编程初学者指南》中描述的概念,下面的示例使用ADO组件(AdoQuery/AdoTable连接到ADO...

  • 发布于 2021-09-10 22:31
  • 阅读 ( 234 )

用delphi编写网络感知应用程序

在Delphi为支持通过网络(internet、intranet和local)交换数据的应用程序而提供的所有组件中,最常见的两个组件是TServerSocket和TClientSocket,这两个组件都旨在通过TCP/IP连接支持读写功能。 winsock和delphi套接字组件 Windows Sockets(W...

  • 发布于 2021-09-10 23:39
  • 阅读 ( 199 )
rcoefvrgqwo
rcoefvrgqwo

0 篇文章

相关推荐