-1

我有一个 StrinGrid 组件和一个过程:

procedure TForm3.StringGrid1Click(Sender: TObject);
begin
    SelectedElement := stringgrid1.Cells[0,stringgrid1.Row];
end

SelectedElement 在公共部分声明:

public
SelectedElement : String;
end;

例如,当我在本机中使用它时Label1.Caption := SelectedElement,它工作正常。但是在另一个单元中,我uses unit1在中指定implementation,我尝试像这样使用这个变量,Label1.Caption := Form1.SelectedElement它将标签设置为空字符串。但是当我手动设置变量时,例如在第一个表单创建时,这个值会以第二个表单显示,即使变量后来从 stringgrid 更改为值。

4

2 回答 2

2

鉴于您到目前为止显示的代码量很少,很难确定您的问题,但是根据您到目前为止的评论,在我看来,您可能是TForm3在运行时使用TForm3.Create()而不是分配动态创建对象该对象指向全局Form3指针,但正试图使用​​全局Form3指针来访问该SelectedElement值。那是对的吗?

此外,您显示TForm3.StringGrid1Click()的是 setting TForm3.SelectedElement,但您正在访问Form1.SelectedElement而不是Form3.SelectedElement. TForm1有自己的SelectedElement成员吗?还是您没有显示您真实项目中的真实代码副本/粘贴?

于 2013-01-05T00:41:45.630 回答
1

您应该向返回所需值的表单添加一个属性:

....
private
  function GetSelectedElement: string;
public
  property SelectedElement: string read GetSelectedElement;
....

并像这样实现它:

function TForm3.GetSelectedElement: string;
begin
  Result := StringGrid1.Cells[0, StringGrid1.Row];
end;

这将始终返回我认为您想要的当前状态。

于 2013-01-05T00:13:54.727 回答