はじめまして フォーム2のEDITにフォーム1のEDITの値を渡したいのですが
そのさいに
Form2.Edit.Text := Edit1.Text
ではなく、フォーム2のコンポーネント以外(グローバル以外)に値を
わたしたいのです。いろいろ探してみたのですが見つからず四苦八苦です。
どなたかご教授くださいませ。
Form2にプロパティを持たせたいと言うことでしょうか。
{Form2の定義に追加}
private
function GetEditText: String;
procedure SetEditText(Value: String);
public
property EditText: String read GetEditText write SetEditText;
{上に定義した2関数の実体}
function TForm2.GetEditText: String;
begin
Result := Edit1.Text;
end;
procedure TForm2.SetEditText(Value: String);
begin
Edit1.Text := Value;
end;
なぜ Form2.Edit.Text := Edit1.Text がだめなのか
理解するのに四苦八苦です。
> なぜ Form2.Edit.Text := Edit1.Text がだめなのか
たまにありますよ。
だめ、というのでなく、入力が面倒なときによくやります。
毎度、
frmDebug.Memo1.Lines.Add('デバッグ表示用文字列');
とやるよりも、
frmDebug.PutLog('デバッグ表示用文字列');
としたほうがすっきりしますし。
私の場合は、わざわざプロパティにするのでなく、Get関数、Set関数を用意します。
なるほど〜。人それぞれですね。
私はなるべくコードの見通しのいい方を選んでいます。
他人に引き継ぐ場合のことも考えると、そのほうがいいですし。
例えば
frmDebug.Memo1.Lines.Add('デバッグ表示用文字列');
なら、
「frmDebug.Memo1 に文字列を追加するんだな」
とすぐ分かりますが、
frmDebug.PutLog('デバッグ表示用文字列');
なら、
「PutLog ってなんだったっけ?」
と、1段階余分な思考が必要になりますから。
似たような質問かもしれませんがフォーム1からフォーム2へいく時に
フォーム名.Show 以外の方法はないおですか?
フォーム名はグローバルなので変更したいのですがわかりませぬ。
お願いいたします。
インスタンスの変数名とフォーム名を間違っている人がまた一人いる・・・
グローバルにしない方法はちょっと前のスレにたくさん提案があったでしょ。
インスタンスは参照なんだからimpelementation のしたにでも変数を確保しておけば無問題。
> 似たような質問かもしれませんが
全然似ていません。ユニットと TForm などのクラス宣言は全然別の概念。
そもそもこのスレの質問自体が意味をなしていない。厳密に言うと。
Delphiが簡単に出来すぎていて、オブジェクトの概念を理解しないでやってる人が多いんでしょ。困ったものだが、、、
別にフォーム名なんてインスタンスに過ぎませんから、、、
普通の変数でなんら問題ないんですよ。
var
F : TMyForm;
begin
F := TMyForm.Create(Self);
F.Show;
end;
だって、MyFormが出せますよ。ただ、メモリの開放に注意しなければなりませんが、実行時に作成するフォーム一覧から外して、そのFormのOnCloseで、
Action := caFree;
とかにしてればなんら問題なさげなわけで、、、
お返事ありがとうございます
var
F : TMyForm;
begin
F := TMyForm.Create(Self);
F.Show;
end;
でフォームは表示されたのですが、他のフォームにデータ(文字列)を渡す際に
F.SetData(Edit1.Text);
ではエラーになります。
迷い込んでいるのでどなたかお願いいたします
SetDataをprivateで宣言しているのでは?
TMyFormは上から2番目のにしのさんのコードを使って
var
F : TMyForm;
begin
F := TMyForm.Create(Self);
F.Show;
F.EditText := Edit1.Text;
end;
どのようなエラーが起きるのか、SetDataというものがどういう定義になっているのかが解らないと、答えようがないですよ。
もう少し、第3者が読んでも解るように書いてみてください。
これだけの情報で書くならば、
・SetDataプロシージャが定義されていない。
・SetDataプロシージャがpublicに定義されていない。
・SetDataプロシージャの引数が文字列ではない。
・Fのオブジェクトが破棄されているor生成されていない。
・記述する場所を間違っている(beginとendの間ではないなど)。
などなど。
にしの氏が、記述して欲しい内容について細かく書いておるのだが、これ嫁
http://www.hyuki.com/writing/techask.html
ツイート | ![]() |