【问题标题】:Delphi. Show parent window from child德尔福。从子窗口显示父窗口
【发布时间】:2013-07-03 09:24:34
【问题描述】:

我有一个带有两个窗口的小应用程序。当我打开第二个表单时 - 第一个表单隐藏:

procedure TIndexForm.startButtonClick(Sender: TObject);
begin

  workingForm.Show(); // show second form
  IndexForm.Hide(); // hide first form

end;

但如果第二个窗口关闭 - 应用程序仍在运行(没错)。但是,我想在第二个窗口关闭时打开第一个窗口:

procedure TworkingForm.FormClose(Sender: TObject);
begin
  parent.Show();
end;

而且这段代码不起作用......我该怎么做?

提前致谢:)

【问题讨论】:

  • 一些建议。不要说“此代码不起作用”。告诉我们您预期会发生什么,以及实际会发生什么。如果有错误消息,请逐字包含它们。

标签: windows forms delphi


【解决方案1】:

我看到了两个问题。首先,这不是真正的OnClose 事件处理程序。在 Visual Basic 中,您只需在代码中键入它们的名称即可创建事件处理程序,但在 Delphi 中,它们的名称无关紧要。它们需要连接到表单或控件的事件属性,我可以说这个没有连接,因为OnClose 事件需要两个参数,而不是一个。双击 Object Inspector 中的事件,让 IDE 为您生成具有正确参数的事件处理程序,并自动将其挂钩到事件。

其次,你要显示的表格不是Parent。这很明显,因为如果父窗口被隐藏,那么它的所有子窗口也是如此。因此,您的两个表单没有父子关系。

如果您想显示其他表单,只需使用与最初隐藏它相同的技术即可:

IndexForm.Show;

【讨论】:

  • 为了使用IndexForm.Show 方法,我需要添加第一个表单单元(因为它不适用于第二个单元),但是这个 - 内存不足错误..
  • 这个问题与内存不足无关。这是一个完全不同的问题。
【解决方案2】:

我认为你使用了错误的事件。您似乎正在显示和隐藏表单。因此,您希望将事件附加到 OnHide 而不是 OnClose

Parent 上调用Show 也是错误的。 Windows 控件的Parent 是包含控件。例如,当您将按钮放在面板中时,按钮的父级就是面板。在您的情况下,您想在其他表单上致电 Show

【讨论】:

    【解决方案3】:

    在本例中,Parent 未分配给第一个表单。 您需要在实施使用条款中添加具有第一种形式的单元或 调用类似的东西 Application.MainForm.Show;

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-02-14
      • 1970-01-01
      • 1970-01-01
      • 2020-10-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多