現在以下のように実装しています。
Form1上にTPanelを設置しその中にForm2を生成。
Form1上のボタンクリックでForm2上のテキストBOXの値を読み込む
[Form1]
use Form2;
type
TForm1 = class(TForm)
Panel1: TPanel;
Btn1: TButton;
procedure FormCreate(Sender: TObject);
procedure Btn1Click(Sender: TObject);
private
{ Private declarations }
PForm : TForm;
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
//フォーム作成
procedure TForm1.FormCreate(Sender: TObject);
begin
PForm := TForm2.Create(nil);
PForm.Parent := MainPanel;
PForm.Left := 0; PForm.Top := 0;
PForm.Show;
end;
//ボタンを押す
procedure TForm1.Btn1Click(Sender: TObject);
var s :String;
begin
s =: Form2.moji
[Form2]
type
TForm2 = class(TForm)
Name: TEdit;
function moji:String;
end;
var
Form2: TForm2;
implementation
{$R *.dfm}
function moji:String;
begin
Name.Text := 'test'; //エラー発生
Result := Name.Text;
end;
エラー内容は読み込み違反というように出ます。
初歩的な質問で申し訳ないのですが原因と対処法を教えてください。
PFormとForm2は別の変数、別の内容です。
| var
| Form2: TForm2;
はIDEがフォームの自動生成に使うやつなので削除してしまってから考えるとわかりやすくなるのでは?
| s =: Form2.moji
は
| s =: PForm.moji
とするべき、ってことですね。
ン
別のコンポーネントの中に埋め込む目的なら、ヤニじゃなくてヤニを使うべきじゃないかと。
それはそれとして、エラーになっている原因は
(最後で宣言されているヲサヲサヲサは本当はヲサヲサヤニイョヲサなんでしょうけど、それも置いといて……)
ヲサヲサミニヲサコスヲサヤニイョティゥサ
これで作った「ミニ」と
ヲサヲサ
ヲサヲサヲサニイコヲサヤニイサ
これで宣言されている「ニイ」とが全然別の変数だということです。
別の変数ですから、片方に代入したからといってもう片方にも自動的に同じものが設定されたりはしません。
この「ニイ」という変数は、プロジェクトの設定で「自動作成」にした場合に限り、その自動作成したフォームが代入されます。
そうでない場合、この「ニイ」という変数は無意味です。どこかよそでヲサヤニイョテヲサしたからといって、自動的に設定されたりはしません。
というわけで、
ヲサヲサヲサヲサスコヲサニイョ
じゃなくて、自分が作ったミニを使って
ヲサヲサヲサヲサスコヲサミニョ
にしましょう……ですけどそれ以前にヤニじゃなくてヤニ使いましょう。
スススススススススススススススススススススススススススススススススススススススス
ニコ デル太郎
トコ イーアカッーイッアケィ金ゥ アウコエイコウカ シ スュアセシ初心者セ シッニセシノヘヌ ス「コッッョョョッッアョ「 ス「ー「セ 書込者ノト:ロ 」 。、 ン
皆様ありがとうございます。
ヲサヲサヲサヲサスコヲサミニョ
とした場合、がみつからず解決できないみたいです。
また、ではなく直接読み込みでもよいのですが
ヲサコスヲサミニョホョヤサ
でもホが解決できません。
これらはどうしてでしょうか。
初歩的な質問ばかりですみません。
ヲサ ヤニじゃなくてヤニ使いましょう
まだ使ったことがないので勉強します。
スススススススススススススススススススススススススススススススススススススススス
ニコ ヘョリメチル
トコ イーアカッーイッアケィ金ゥ アクコオエコウキ 書込者ノト:ロ 」。ァ ン
ヲサこれらはどうしてでしょうか。
その前に,ちゃんとしたコードを示してみてはどうでしょうかヲサソ
ヲサヲサヲサは本当はヲサヲサヤニイョヲサなんでしょうけど、それも置いといて……)
というレスもあることですし.
「オン書き」ではなく,テストしたプロジェクトのコードを「コピー」して「貼り付け」ます.
「オン書き」というのは,掲示板の入力欄に,直接キーボードでタイプして入力することです.
少なくとも,ヤニアヲサのコードにはヲササヲサというのが抜けているのか,
それ以降のコードを省略しているのかが不明です.
おそらく「オン書き」と思われていることは間違いないようです.
私も,ぱっと見て,悩んでいますから.
「はたして,オン書きなのか,本当はコピペなのかヲサソヲサさて,どっちなのかヲサソヲサ」とヲサ
「白ける」発言でしたらゴメンナサイヲサィ゜ヲサ゜ゥ
スススススススススススススススススススススススススススススススススススススススス
ニコ デル太郎
トコ イーアカッーイッアケィ金ゥ イウコウカコエカ シ スュアセシ初心者セ シッニセシノヘヌ ス「コッッョョョッッアョ「 ス「ー「セ 書込者ノト:ロ ・ゥ ン
モコ
私も初めて利用したもので質問の書き方が悪かったです。
ヘョリメチルさんの仰られている通り「オン書き」です。
元々のソースを簡略化して書いたのですが逆にわかりづらくなってしまったようで申し訳ありません。
ただ、質問したかった内容については解決しました。
ヲサコスヲサヤニイィミニゥョホョサ
上記のようにキャストしました。
ありがとうございました。
スススススススススススススススススススススススススススススススススススススススス
ニコ
トコ イーアカッーイッアケィ金ゥ イウコエケコウー 書込者ノト:ロ 「」「 ン
む、そっちに行ってしまいましたか……
無用なキャストはバグを生むもとなので、私見では避けてほしいところ。
ヲサヲサヲサヲサヲサヲサミヲサヲサ
ヲサヲサヲサヲサヲサミニヲサコヲサヤニサ
実際のソースもこの通りなのだとしたら、
ミニヲサがヤニイじゃなくてただのヤニだよ、と宣言しているのが原因なので
ヲサミニヲサコヲサヤニイサ
とするのが正解かと。
スススススススススススススススススススススススススススススススススススススススス
ニコ 通りすがり
トコ イーアカッーイッイーィ土ゥ ーーコエカコーエ 書込者ノト:ロ ァ。。 ン
クラスの静的キャスト、ダメ。ゼッタイ。
で動的キャストしましょう。
スススススススススススススススススススススススススススススススススススススススス
ニコ ヘョリメチル
トコ イーアカッーイッイーィ土ゥ アーコオイコーエ 書込者ノト:ロ 」。ァ ン
私の書き方が適切でなかったようです.お詫びします.
「オン書き」か「コピペ」かということは,ヲサさんが
ヲサヲサヲサは本当はヲサヲサヤニイョヲサなんでしょうけど、それも置いといて……
と推測しているように,
「オン書き」したため,タイプミスがあったのではないかと言うことです.
わかりづらいとか,そういうことではありません.
スススススススススススススススススススススススススススススススススススススススス
ニコ デル太郎
トコ イーアカッーイッイーィ土ゥ アケコオーコエイ 書込者ノト:ロ 」 。」「 ン
皆様アドバイスありがとうございます。
ヲサさん
ヲサミニヲサコヲサヤニイサ
ヲサとするのが正解かと。
後だしみたいになってしまい申し訳ないのですが
このミニにはヤニイだけではなくリリースして再度他のフォームをして〜みたいに使おうと思っていたので
出来ればキャストして使いたいです。
ただし仰られるように無用なキャストはバグの元であるという点は肝に命じておきます。
ィ私の理解が浅いだけで別にキャストしなくても大丈夫なのかもしれませんが。。。ゥ
ヲサ通りすがりさん
ヲサで動的キャストしましょう。
静的キャストと動的キャストの違いやクラスを静的キャストしてはいけない理由について勉強します。
ヲサヘョリメチルさん
いろいろとすみません。
確かに不十分なソースだと判断できないですよね。。。
今後は簡略化した上で一度コンパイルしてみてから
ソースを載せるようにします。
スススススススススススススススススススススススススススススススススススススススス
ニコ ヘョリメチル
トコ イーアカッーイッイアィ日ゥ ーケコウカコアク 書込者ノト:ロ ァ。ヲ。「 ン
何故,タイプミスヲサィ入力ミスゥヲサがあったのではないかと思ったのか,
以下に書いてみましたので,参考になれば.
コッッョョョッットツツモッ゜゜ョソスケカーク」ケカアア
ツイート | ![]() |