- PR -

[ShowDialog]フォームのオープン後、自分自身を閉じたい

投稿者投稿内容
まっちー
会議室デビュー日: 2004/10/22
投稿数: 15
お住まい・勤務地: 浜松町
投稿日時: 2004-11-11 11:25
「frmMain」と「frmSub」の2つのフレームがあるとします。
「frmMain」からは「frmSub」を。
「frmSub」からは「frmMain」を、それぞれ呼びます。
クリックイベント内にて「ShowDialog」を行っています。

実行すると、新しいイベントが発生するたびに画面が増えてしまいます。
自分自身のウィンドウがうまく閉じれていないような状況です。
解決策をご教授いただけないでしょうか。
「frmSub」の画面が開いたあとに、自分自身が閉じれるといいのですが…。
初歩的な質問かもしれませんが、よろしくお願いします。

=================================
「frmMain」内
Private Sub button1_Click()
Me.Close()

'frmSubへ
Dim fm As New frmSub
fm.ShowDialog(Me)
End Sub
=================================

_________________
にしざき
ぬし
会議室デビュー日: 2003/06/30
投稿数: 304
投稿日時: 2004-11-11 13:15
frmSub で frmMain を呼ぶ理由は何ですか?
まっちー
会議室デビュー日: 2004/10/22
投稿数: 15
お住まい・勤務地: 浜松町
投稿日時: 2004-11-11 13:19
「frmMain」が、入力画面。
「frmSub」が結果表示画面のようになってます。
なので、入力←→結果を自由に切り替えたいのです。

よい方法があればご教授いただけますでしょうか。
_________________
にしざき
ぬし
会議室デビュー日: 2003/06/30
投稿数: 304
投稿日時: 2004-11-11 13:37
引用:

「frmMain」が、入力画面。
「frmSub」が結果表示画面のようになってます。


だったら尚更入力画面を閉じる必要がない気がするのですが。

切り替えたいというのであれば、入力/結果をユーザコントロールとして実装し、親フォームが表示する子を切り替えるとかのほうがいいような気がします。
まっちー
会議室デビュー日: 2004/10/22
投稿数: 15
お住まい・勤務地: 浜松町
投稿日時: 2004-11-11 14:08
入力「frmMain」→結果「frmSub」で、増えてしまうのは、よいことにしても、
結果→入力のときもさらに増えてしまうのです。
タスクバー上に、ボタン(?)がキリなくならぶことになってしまって…。
ひとつ閉じると、まとめて閉じるのですが、やはりよろしくないと。
結果→入力への切り替えも、上記の例と同じように記述してます。

引用:

切り替えたいというのであれば、入力/結果をユーザコントロールとして実装し、親フォームが表示する子を切り替えるとかのほうがいいような気がします。



メニュー画面もあり、メニューのボタンから、
各々を開くときは全く問題ありません。
子フォーム同士で呼び合うことは無理なのですか?
イメージとしては、HTMLでいうところの<A href="〜" target="_self">で、
自分自身のなかに呼ぶというようなイメージでよいのでしょうか?
(私の浅い経験では、これくらいしか思い浮かびませんでした。)
申し訳ありませんが、
もう少し具体的にご説明いただけると幸いです。
経験が浅いもので、申し訳ありません。

_________________
Jubei
ぬし
会議室デビュー日: 2002/03/02
投稿数: 830
お住まい・勤務地: 関西
投稿日時: 2004-11-11 14:36
諸農です。

引用:

入力「frmMain」→結果「frmSub」で、増えてしまうのは、よいことにしても、
結果→入力のときもさらに増えてしまうのです。



いまいち状況が把握できないのですが、
何故に、「結果→入力のときもさらに増えて」しまうのですか?
結果画面を閉じれば、呼元の入力画面に戻りますよね?
戻らないまたは戻してはいけない理由か何かがあるのですか?

_________________
諸農和岳
Powered by Turbo Delphi & Microsoft Visual Studio 2005

十兵衛@わんくま同盟
http://blogs.wankuma.com/jubei/
まっちー
会議室デビュー日: 2004/10/22
投稿数: 15
お住まい・勤務地: 浜松町
投稿日時: 2004-11-11 14:57
引用:

結果画面を閉じれば、呼元の入力画面に戻りますよね?



なるほど〜。
確かに、結果画面を閉じれば、呼び元の画面に戻る気がします。

入力画面からも、結果画面からも、
先頭で記述したような開き方をしていたので、
どんどん画面が増える結果に…。

ちょっとやってみます。
_________________
まっちー
会議室デビュー日: 2004/10/22
投稿数: 15
お住まい・勤務地: 浜松町
投稿日時: 2004-11-11 20:57
結果画面「frmSub」を閉じることで、呼び元の画面「frmMain」に戻ることはできました。
ありがとうございます。

しかし、今回のシステムでは、再読み込み(FormのLoadイベント)が行われないと、
うまくいかないことがわかりました。
ふつうに閉じただけではLoadは発生しないので、
以下のようにしてみたのですが、うまくいきません。
処理は走るのに、画面上はなにも変わらない。
=================================
「frmSub」結果画面内
Private Sub button1_Click()
Me.Close()

'frmMainへ
Dim fm As New frmMain
'fm.ShowDialog(Me) 'このかわりに、
Call fm.frmMain_Load(sender, e) '「frmMainのLoadイベント」を呼ぶ
End Sub
=================================

実現したいことをまとめます。
「frmMain」と「frmSub」の画面の切り替えが行いたい。
呼ばれたフォームは、「Loadイベント」から処理を行いたい。

修正覚悟で、あまりやり方は問いませんので、
なにかいい方法をご存知でしたら、ご教授願います。
素人で申し訳ありません。
_________________

スキルアップ/キャリアアップ(JOB@IT)