-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から値に変更された場合でも、この値は2番目のフォームに表示されます。

4

2 に答える 2

2

これまでに示したコードの量が少ないため、問題を確実に診断することは困難ですが、これまでのコメントに基づくと、TForm3実行時にオブジェクトを動的に作成し、TForm3.Create()割り当てを行わないように思われます。グローバルポインタへのオブジェクトですが、値にアクセスするForm3ためにグローバルポインタを使用しようとしています。あれは正しいですか?Form3SelectedElement

また、あなたTForm3.StringGrid1Click()は設定していることを示していますが、の代わりにTForm3.SelectedElementアクセスしています。独自のメンバーはいますか?または、実際のプロジェクトからコピー/貼り付けされた実際のコードを表示していませんか?Form1.SelectedElementForm3.SelectedElementTForm1SelectedElement

于 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 に答える