如何将StringGrid行号传递给另一个表单?

时间:2013-01-04 23:59:29

标签: delphi stringgrid

我有一个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,它将label设置为空字符串。但是当我手动设置变量时,例如在第一个表单上创建,则该值以第二种形式显示,即使变量稍后从stringgrid更改为value。

2 个答案:

答案 0 :(得分:2)

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

此外,您显示TForm3.StringGrid1Click()正在设置TForm3.SelectedElement,但您正在访问Form1.SelectedElement而不是Form3.SelectedElementTForm1是否有自己的SelectedElement成员?或者您是否没有在真实项目中显示真实的代码复制/粘贴?

答案 1 :(得分:1)

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

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

并按照以下方式实施:

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

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