ほかのユニットにデータを渡すときに、コンポーネント以外にわたしたいのですが?


march  2005-06-03 05:48:29  No: 15302

はじめまして  フォーム2のEDITにフォーム1のEDITの値を渡したいのですが
そのさいに
Form2.Edit.Text := Edit1.Text
ではなく、フォーム2のコンポーネント以外(グローバル以外)に値を
わたしたいのです。いろいろ探してみたのですが見つからず四苦八苦です。
どなたかご教授くださいませ。


にしの  2005-06-03 06:57:28  No: 15303

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;


deldel  2005-06-03 17:34:32  No: 15304

なぜ Form2.Edit.Text := Edit1.Text がだめなのか
理解するのに四苦八苦です。


にしの  2005-06-03 18:19:07  No: 15305

> なぜ Form2.Edit.Text := Edit1.Text がだめなのか

たまにありますよ。
だめ、というのでなく、入力が面倒なときによくやります。
毎度、
frmDebug.Memo1.Lines.Add('デバッグ表示用文字列');

とやるよりも、
frmDebug.PutLog('デバッグ表示用文字列');
としたほうがすっきりしますし。

私の場合は、わざわざプロパティにするのでなく、Get関数、Set関数を用意します。


deldel  2005-06-03 19:35:59  No: 15306

なるほど〜。人それぞれですね。
私はなるべくコードの見通しのいい方を選んでいます。
他人に引き継ぐ場合のことも考えると、そのほうがいいですし。

例えば
  frmDebug.Memo1.Lines.Add('デバッグ表示用文字列');
なら、
  「frmDebug.Memo1 に文字列を追加するんだな」
とすぐ分かりますが、
  frmDebug.PutLog('デバッグ表示用文字列');
なら、
  「PutLog ってなんだったっけ?」
と、1段階余分な思考が必要になりますから。


form;  2005-06-04 05:42:58  No: 15307

似たような質問かもしれませんがフォーム1からフォーム2へいく時に
フォーム名.Show  以外の方法はないおですか?
フォーム名はグローバルなので変更したいのですがわかりませぬ。
お願いいたします。


また・・・  2005-06-04 07:23:05  No: 15308

インスタンスの変数名とフォーム名を間違っている人がまた一人いる・・・

グローバルにしない方法はちょっと前のスレにたくさん提案があったでしょ。
インスタンスは参照なんだからimpelementation のしたにでも変数を確保しておけば無問題。

> 似たような質問かもしれませんが

全然似ていません。ユニットと TForm などのクラス宣言は全然別の概念。
そもそもこのスレの質問自体が意味をなしていない。厳密に言うと。


通りすがり  2005-06-04 20:25:13  No: 15309

Delphiが簡単に出来すぎていて、オブジェクトの概念を理解しないでやってる人が多いんでしょ。困ったものだが、、、

別にフォーム名なんてインスタンスに過ぎませんから、、、
普通の変数でなんら問題ないんですよ。
var
  F : TMyForm;
begin
  F := TMyForm.Create(Self);
  F.Show;
end;
だって、MyFormが出せますよ。ただ、メモリの開放に注意しなければなりませんが、実行時に作成するフォーム一覧から外して、そのFormのOnCloseで、
Action := caFree;
とかにしてればなんら問題なさげなわけで、、、


march  2005-06-06 22:22:46  No: 15310

お返事ありがとうございます
var
  F : TMyForm;
begin
  F := TMyForm.Create(Self);
  F.Show;
end;
でフォームは表示されたのですが、他のフォームにデータ(文字列)を渡す際に
F.SetData(Edit1.Text);
ではエラーになります。
迷い込んでいるのでどなたかお願いいたします


ななし  2005-06-06 22:55:41  No: 15311

SetDataをprivateで宣言しているのでは?
TMyFormは上から2番目のにしのさんのコードを使って

var
  F : TMyForm;
begin
  F := TMyForm.Create(Self);
  F.Show;
  F.EditText := Edit1.Text;
end;


にしの  2005-06-06 22:57:21  No: 15312

どのようなエラーが起きるのか、SetDataというものがどういう定義になっているのかが解らないと、答えようがないですよ。
もう少し、第3者が読んでも解るように書いてみてください。

これだけの情報で書くならば、
・SetDataプロシージャが定義されていない。
・SetDataプロシージャがpublicに定義されていない。
・SetDataプロシージャの引数が文字列ではない。
・Fのオブジェクトが破棄されているor生成されていない。
・記述する場所を間違っている(beginとendの間ではないなど)。
などなど。


ん?  2005-06-07 00:11:55  No: 15313

にしの氏が、記述して欲しい内容について細かく書いておるのだが、これ嫁
http://www.hyuki.com/writing/techask.html


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加