如何在所有FormCreate事件中聪明地添加一行代码而不编辑所有表单?

时间:2018-07-16 08:52:55

标签: delphi delphi-10-seattle

我需要以我的应用程序的所有形式调用初始化例程,这是一个Intraweb应用程序,因此实际上我将使用public async Task<bool> Heartbeat() { if (connectionConfig.events.heartbeatUrl == "") { return false; } var val = false; var heartbeatRequest = new HeartbeatRequest(); heartbeatRequest.host = connectionConfig.host; heartbeatRequest.name = connectionConfig.name; heartbeatRequest.eventId = lastEventId; var prettyJson = JToken.Parse(JsonConvert.SerializeObject(heartbeatRequest)).ToString(Formatting.Indented); var response = await client.PostAsync(connectionConfig.events.heartbeatUrl, new StringContent(prettyJson, Encoding.UTF8, "application/json")); PingResponse heartbeatResponse = JsonConvert.DeserializeObject<PingResponse>(await response.Content.ReadAsStringAsync()); if (heartbeatResponse != null) { Console.WriteLine("Heartbeat: " + heartbeatResponse.message); val = heartbeatResponse.success; } else { // todo: sentry? } return val; } 而不是OnIWAppFormCreate,无论如何问题都是相同的。 / p>

我有2种技巧:

  1. 使用可视表单继承:在这种情况下,我创建一个BaseForm,在其中实现FormCreate事件并从中继承所有表单

  2. 我添加了一个全局过程,并以各种形式调用它

这两种技术都使我可以编辑每种表格。

有办法避免这种情况吗?

实际上,我需要做的是将相同的字符串添加到TIWAppForm.ExtraHeader字符串列表属性。

这是我需要添加到每种表单中的代码:

OnFormCreate

我想以某种方式知道是否可以使用我不知道的技术对它进行一次编码。

谢谢。

1 个答案:

答案 0 :(得分:1)

最好的解决方案是从基本表单继承,即使在几乎所有表单中,我都编写了OnFormCreate以便执行我的任务:

  1. 创建继承自implode(',', $output_ids)

  2. 的基本表单 我从基本形式继承的单元声明中的
  3. 在dfm中
  4. 我将TIWAppForm替换为object

  5. 我在所有表单的FormCreate中
  6. 都显式调用inherited