表单之间的通信

模态形式提供了非模态显示时无法拥有的特定功能。最常见的情况是,我们将以模式显示表单,以将其进程与主表单上可能发生的任何事情隔离开来。一旦这些过程完成,您可能想知道用户是否按下保存或取消按钮来关闭模式表单。您可以编写一些有趣的代码来实现这一点,但并不一定很难。Delphi为模态表单提供了ModalResult属性,我们可以读取该属性来告诉用户如何退出表单。...

模态形式提供了非模态显示时无法拥有的特定功能。最常见的情况是,我们将以模式显示表单,以将其进程与主表单上可能发生的任何事情隔离开来。一旦这些过程完成,您可能想知道用户是否按下保存或取消按钮来关闭模式表单。您可以编写一些有趣的代码来实现这一点,但并不一定很难。Delphi为模态表单提供了ModalResult属性,我们可以读取该属性来告诉用户如何退出表单。

woman using laptop

以下代码返回一个结果,但调用例程忽略该结果:

var F:TForm2; begin F := TForm2.Create(nil); F.ShowModal; F.Release; ...

上面显示的示例只是显示表单,让用户使用它做一些事情,然后发布它。要检查表单是如何终止的,我们需要利用showmodel方法是返回几个ModalResult值之一的函数这一事实。换线

肖莫代尔

如果F.ShowModal=mrOk,则

我们需要一些模态形式的代码来设置我们想要检索的内容。获取ModalResult的方法不止一种,因为TForm不是唯一具有ModalResult属性的组件—TButton也有一种。

让我们先看看TButton的模型结果。启动一个新项目,并添加一个附加表单(DelphiIDE主菜单:文件->新建->表单)。此新表单将具有“Form2”名称。接下来向主窗体(Form1)添加一个TButton(名称:“Button1”),双击new按钮并输入以下代码:

procedure TForm1.Button1Click(Sender: TObject); var f : TForm2; begin f := TForm2.Create(nil); try if f.ShowModal = mrOk then Caption := 'Yes' else Caption := 'No'; finally f.Release; end; end;

现在选择附加表单。给它两个按钮,一个标记为“保存”(名称:“btnSave”;标题:“保存”),另一个标记为“取消”(名称:“btnCancel”;标题:“取消”)。选择“保存”按钮并按F4键打开“对象检查器”,向上/向下滚动,直到找到属性ModalResult并将其设置为mrOk。返回表单并选择Cancel按钮,按F4,选择属性ModalResult,然后将其设置为mrCancel。

就这么简单。现在按F9运行项目。(根据您的环境设置,Delphi可能会提示保存文件。)主窗体出现后,按前面添加的按钮1,以显示子窗体。当子窗体出现时,按Save按钮,窗体关闭,返回主窗体后请注意,它的标题显示“Yes”。按主窗体的按钮再次调出子窗体,但这次按取消按钮(或系统菜单关闭项或标题区域中的[x]按钮)。主窗体的标题为“否”。

这是怎么回事?要了解更多信息,请查看TButton的Click事件(来自StdCtrls.pas):

procedure TButton.Click; var Form: TCustomForm; begin Form := GetParentForm(Self); if Form nil then Form.ModalResult := ModalResult; inherited Click; end;

发生的情况是,TButton的所有者(在本例中是第二种形式)根据TButton的ModalResult的值获取其ModalResult集。如果未设置TButton.ModalResult,则该值为mrNone(默认情况下)。即使TButton被放置在另一个控件上,父窗体仍然用于设置其结果。最后一行调用从其祖先类继承的Click事件。

要了解Forms ModalResult的运行情况,有必要查看Forms.pas中的代码,您可以在..\DelphiN\Source(其中N表示版本号)中找到这些代码。

在TForm的showmodel函数中,直接在显示表单后重复,直到循环开始,这将持续检查变量ModalResult是否变为大于零的值。发生这种情况时,最终代码关闭表单。

您可以在设计时设置ModalResult,如上所述,但也可以在运行时直接在代码中设置窗体的ModalResult属性。

  • 发表于 2021-10-05 08:19
  • 阅读 ( 109 )
  • 分类:IT

你可能感兴趣的文章

wordpress的11个最佳联系人表单插件

...可以访问多个插件,用于在您的站点上生成和放置联系人表单。下面是一些最好的,每一个都提供了很好的方式来定制你的访客的用户体验时,接触到你。 ...

  • 发布于 2021-03-26 17:18
  • 阅读 ( 222 )

如何使用主题、图像和字体自定义google表单

googleforms是在线**可填充表单的最简单方法。大多数Google表单看起来都很相似,但是你可以让你的表单脱颖而出,适合你的活动、网站或公司的品牌。 选择模板 自定义Google表单的第一种方法是从库中选择模板。Google提供了17种...

  • 发布于 2021-04-02 11:03
  • 阅读 ( 223 )

如何使用slack的工作流生成器

...须选择以下步骤之一: 发送信息:给某人或频道。 发送表单:发送给某人或频道。 即使这些是简单的触发器和操作,您仍然可以构建相当复杂的工作流,例如批准或数据收集。Slack计划的下一个新增功能是支持使用API触发工...

  • 发布于 2021-04-02 18:26
  • 阅读 ( 169 )

如何在google表单中生成随机数

googlesheets提供了一个简单的函数,可以在电子表格中生成随机数,而无需离开文档或安装附加组件。函数返回两个值之间的随机整数。下面是如何使用它。 启动googlesheets主页,打开一个新的或现有的电子表格。对于本指南,我...

  • 发布于 2021-04-02 23:54
  • 阅读 ( 250 )

如何在microsoftword中设置费用单

...然每家公司可能都有自己的报销规则,但无论您在哪里,表单的总体结构(以及表单中的项目)都将保持相当一致。 如果你正在为你的公司填写一份费用表,首先要弄清楚他们是否有你应该遵循的准则或者你应该使用的模板。 ...

  • 发布于 2021-04-03 12:26
  • 阅读 ( 116 )

向前地(forward)和重定向(redirect)的区别

...注册,购物车可能需要将控制权转移到负责注册过程的JSP表单。向前动作专门用于此目的。它用于将请求从一个JSP转发到同一上下文中的另一个或另一个资源。   什么是重定向(redirect)? 此方法还用于转发HTTP请求,但与转发不...

  • 发布于 2021-06-25 20:00
  • 阅读 ( 215 )

客户服务器应用程序(client server application)和web应用程序(web application)的区别

...信并显示信息。web应用程序包括各种各样的内容,如在线表单、购物车、文件扫描、文件转换等。web应用程序可以在多个平台上运行,直到浏览器适合为止。所有的客户端都有相似的版本。web应用程序中的通信可以从任何地方访...

  • 发布于 2021-07-10 03:45
  • 阅读 ( 335 )

html格式(html)和http协议(http)的区别

...带有预定义的标记。它们允许用户将图像、文本、视频、表单和其他内容**到一个有凝聚力的网页中。 HTML元素是所有网站的基本构建块。HTML允许在网页中嵌入图像和对象。它还可以用来创建交互式窗体。HTML还提供了创建结构化...

  • 发布于 2021-07-13 06:21
  • 阅读 ( 183 )

html5(html5)和菲律宾比索(php)的区别

...带有预定义的标记。它们允许用户将图像、文本、视频、表单和其他内容**到一个有凝聚力的网页中。 HTML元素是所有网站的基本构建块。HTML允许在网页中嵌入图像和对象。它还可以用来创建交互式窗体。HTML还提供了创建结构化...

  • 发布于 2021-07-13 06:21
  • 阅读 ( 178 )

曲奇(cookies)和会议(sessions)的区别

...是非常容易的。**认为这是非法的。Cookies还可以用来保存表单和密码。注意,当您开始键入电子邮件地址时,它会自动显示以前登录的电子邮件地址的选项。如果您保存了密码,cookies也会自动保存密码并让您登录网站。有各种...

  • 发布于 2021-07-13 06:40
  • 阅读 ( 139 )
maddi2468
maddi2468

0 篇文章

相关推荐