delphi - NIL 可以用于 Sender 对象吗?

标签 delphi delphi-7

最近,我被要求自动化一个小子例程,该子例程显示一系列数据记录以及四个潜在按钮中的任意两个,供用户在查看记录分析后进行选择。老板说让用户看到分析是浪费时间,因为用户总是选择按钮列表中的第一个选项,他准备接受我对除了最好的用户之外的所有用户的猜测。因此,他希望添加一系列新按钮来提供“自动处理”、“手动处理”和“逐个处理”功能。最后一个按钮只会运行已经存在的代码。第二个按钮基本上不会执行任何操作,只是退出。第一个按钮?嗯,这就是问题所在。

我决定做的是使用几个标志,然后根据分析让自动路径模拟任何最佳子按钮的单击。问题是调用 Button1Click(Sender) 是不可能的,因为运行 Analysis 的过程称为 RunAnalysis,并且没有附加到特定对象来传递 TObject。我最终将 Button1Click 方法的核心重构为 Button1Pressed,然后从 Button1Click 调用该方法。因此我能够从 RunAnalysis 中调用 Button1Pressed。

避免的路径是调用 Button1Click(Nil)。我没有尝试,因为我有一个简单的解决方案(顺便说一句,谢谢 Modelmaker)。但我的问题是,零引用会起作用还是会造成灾难。我是否可以调用一个确实有发送者的高级函数(随机?),只是为了在过程调用中拥有发送者对象?如果我不使用任何实际引用 Sender 的东西,Sender 对象到底有多重要?

系统详细信息:Win 7 编程环境中的 Delphi 7,适用于 Windows XP。

提前感谢总经理的任何智慧

最佳答案

如果可能的话,我倾向于将事件处理程序的代码放入另一个方法中:

procedure TForm1.DoSomething(const Test: Boolean);
begin
  // Do Something based on Test
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  DoSomething(False); // init here
end;

procedure TForm1.CheckBox1Click(Sender: TObject);
begin
  DoSomething(TCheckBox(Sender).Checked);
end;

因此,当我需要调用 CheckBox1Click(nil) 时,这对我来说是一个好兆头,可以将事件处理程序中的代码提取到单独的方法中。

关于delphi - NIL 可以用于 Sender 对象吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9274771/

相关文章:

delphi - 如何创建线程保存文件而不覆盖现有文件?

macos - OS X 上的 WriteProcessMemory 等效项

delphi - Windows 7 和 Windows Server 2008 R2 : significant increase in run time

用于 Delphi 的 Javascript 引擎

delphi - 如何通过新的 RTTI 设置事件处理程序? [D2010]

Delphi可调整大小的bsDialog窗体?

delphi - 优化 Delphi 7 中的 TChart 绘图

Delphi 格式字符串 - 宽度和精度值的限制?

delphi - 如何在 Delphi 中引用 FireDAC 中的字段名称

delphi - Form OnDeactivate - 需要确定哪个是新的激活控件