最近我被要求自动化一个小的子程序,该程序呈现了一系列数据记录,并提供了四个潜在按钮中的任何两个供用户在查看记录分析后选择。老板说让用户看到分析结果是浪费时间的,因为用户总是选择按钮列表中的第一个选项,他准备接受我的猜测,除了对于他最好的用户外。因此,他想添加一系列新按钮,以提供“自动处理”、“手动处理”和“逐案处理”。最后一个按钮将只运行已经存在的代码。第二个按钮基本上什么也不做,然后退出。第一个按钮?那就麻烦了。
我的决定是使用一些标志,然后让自动路径模拟单击基于分析的最佳子按钮。问题在于,由于运行分析的过程名为RunAnalysis并未附加到特定对象以通过TObject传递,因此无法调用Button1Click(Sender)。最终,我将Button1Click方法的核心重构为Button1Pressed,然后从Button1Click调用它。因此,我能够从RunAnalysis内部调用Button1Pressed。
避免的路径将是调用Button1Click(Nil)。我没有尝试过它,因为我有一个简单的解决方案(顺便感谢Modelmaker)。但我的问题是,空引用是否有效,或者它是否会引起灾难。我能否调用一个具有发送器的更高函数(随机的?),只是为了在过程调用中拥有发送器对象呢?如果我不使用任何实际参考发送器的东西,那么发送器对象到底有多重要?
系统详细信息:Delphi 7 在Win 7编程环境中使用,用于Windows XP。
谢谢您提前给出的任何智慧,GM
我的决定是使用一些标志,然后让自动路径模拟单击基于分析的最佳子按钮。问题在于,由于运行分析的过程名为RunAnalysis并未附加到特定对象以通过TObject传递,因此无法调用Button1Click(Sender)。最终,我将Button1Click方法的核心重构为Button1Pressed,然后从Button1Click调用它。因此,我能够从RunAnalysis内部调用Button1Pressed。
避免的路径将是调用Button1Click(Nil)。我没有尝试过它,因为我有一个简单的解决方案(顺便感谢Modelmaker)。但我的问题是,空引用是否有效,或者它是否会引起灾难。我能否调用一个具有发送器的更高函数(随机的?),只是为了在过程调用中拥有发送器对象呢?如果我不使用任何实际参考发送器的东西,那么发送器对象到底有多重要?
系统详细信息:Delphi 7 在Win 7编程环境中使用,用于Windows XP。
谢谢您提前给出的任何智慧,GM
nil
作为Sender
参数来调用事件处理程序,前提是该事件处理程序不会尝试访问Sender
对象。然而,你应该知道,在任何情况下最好不要直接调用事件处理程序。如果你想模拟按钮的按下,则应该简单地调用按钮的Click
方法。 - David HeffernanButton: TButton
,然后写上Button.Click
。你应该始终优先使用这种方式来调用事件处理程序,而不是直接调用它们。它们真的只应该由框架来调用。 - David Heffernannil
。在你的情况下,只要你不假定在另一端它会被分配,那么这样做应该是安全的。但是,在某些情况下,你确实需要小心传递nil
。 - Jerry Dodge