【发布时间】:2012-07-31 12:25:37
【问题描述】:
我有一个 PopupMenu 项目,其中 TMenuItem 标签根据调用它的按钮而变化。每个按钮都有自己的 TEdit(ResultTFile1、ResultTFile2 和 ResultTFile3)。这些 TEdit 是使用表单设计器创建的。
var
TempResultFile : TEdit;
begin
// Find the right TEdit
case (Sender as TMenuItem).Tag of
1: TempResultFile := ResultTFile1;
2: TempResultFile := ResultTFile2;
3: TempResultFile := ResultTFile3;
end;
// Call save function
if (SaveDialog1.Execute) then TempResultFile.Text := SaveDialog1.FileName;
end;
但是,它不起作用。对话框打开,但在执行后,FileName 变量并未提供给真正的 TEdit.Text(ResultTFile1、ResultTFile2 和 ResultTFile3)。没有错误。什么都没有。调试器似乎没有反应——但是,我可能是错的。如果我很好理解这一点,那是因为该值是给 TempResultFile 而不是真正的 TEdit。如何以 TempResultFile 指向 到组件的方式对其进行编码?
【问题讨论】:
-
您没有提供足够的信息。显示
ResultTFile1等的声明位置。并告诉我们“它不起作用”是什么意思。那是永远不够的信息。需要完整的错误消息和引发错误的代码点。 -
好的,没有错误,什么都没有。文件对话框是否显示?在调试器下运行代码会发生什么?走什么路?
-
TempResultFile确实指向该组件。对象引用就是这样,一个引用。将 if/then 语句分成两行,以便检查SaveDialog1.Execute是否返回True或False。在调试器下执行此操作。 -
一些调试逻辑:当对话框出现(因此例程运行)并且没有填充编辑时,那么,给定上面的代码,唯一可以得出的结论是
SaveDialog1.FileName为空或SaveDialog1.Execute返回False。否则TempResultFile不应指向任何会导致访问冲突的编辑。 -
@Arioch'The:这里没有理由启用调试 DCU。只需在调试器中按原样单步执行代码就会显示问题;完全没有必要进入 VCL/RTL。
标签: delphi pointers reference components