掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
ShowModalについて (ID:39015)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
>procedure TChildForm.FormShow(Sender:TObject); >begin > ChildForm.Width := 600; ChildFormがなんらかの原因で、過去の物となっているのだと思います。 Releaseするのは、今回の場合、問題は有りませんが TChildFormのOnCloseで Action:= caFree ChildForm:=nil; にしておけば Release は不要です。 nil にしておけば、間違ったアクセスの場合、IDEで変数がnilかどうか確認すればいいだけなのでデバッグも楽です。 ボタンなどにModalResultが設定されている場合、押下後に自動で閉じられ OnCloseが発生し、caFree が設定されるという流れです。 その後 ChildForm は、過去の物となりますので、値を更新しない限り使えなくなります。 TFormは、かなりメッセージが飛び、よく理解していないと、解放後に操作してしまうような場合が結構見られますので、今後いろいろ機能を実装する上で、そののようにしておいたほうが無難でしょう。 この場合、TChildFormのFormShowで自身のWidthを変更したいのだと思うので Width:= 600 だけでOKだと思います。 ChildForm は グローバルの var で宣言されていて TChildFormのインスタンスが入っています。 ChildForm.Width のようにアクセスするのは、TChildForm以外の場所からChildForm を参照したい場合に利用します。 また、Sender がある場合、Sender を使ったほうが良いでしょう。 今回の場合、Sender が TChildForm 以外のインスタンスである場合は考えられないとは思いますが、TChildFormを複数作っり動的に作成する場合は、 ChildForm.〜 と書くのは値が予期しない結果となる恐れがあるため推奨されないコードだと思います。 var frm: TChildForm; begin if not Assigned(Sender) then Exit; if not Sender is TChildForm then Exit; frm:= TChildForm( Sender); frm.Width:= 600; end; こう書くのがよろしいかと思います。 var frm: TChildForm; begin if not Assigned(Sender) then Exit; try frm:= Sender as TChildForm; frm.Width:= 600; except 例外処理 end; end; こう書けば、Sender が TChildForm 出ない場合は例外が出ます。 品質、デバッグ優先なら後者のほうがお勧めです。
←解決時は質問者本人がここをチェックしてください。
更新する
戻る
掲示板システム
Copyright 2021 Takeshi Okamoto All Rights Reserved.