我有一个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。
答案 0 :(得分:2)
鉴于到目前为止您显示的代码数量很少,很难确定您的问题,但根据您的评论到目前为止,我觉得您可能正在动态创建TForm3
对象在运行时使用TForm3.Create()
并且不将对象分配给全局Form3
指针,但是尝试使用全局Form3
指针来访问SelectedElement
值。这是对的吗?
此外,您显示TForm3.StringGrid1Click()
正在设置TForm3.SelectedElement
,但您正在访问Form1.SelectedElement
而不是Form3.SelectedElement
。 TForm1
是否有自己的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;
这将始终返回我认为您想要的当前状态。