- - PR -
サブ画面でのメッセージボックスの処理
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2004-07-20 18:50
お世話さまです。
VB.NETで2つのフォーム(frmA,frmB)があります。 frmAで下記のようにしてfrmBをモーダルで表示しており、 frmBでの終了確認をメッセージボックスで行っています。 <frmAのコード> frmB.ShowDialog(Me) If frmB.DialogResult = DialogResult.Abort Then Me.Dispose() Else If frmB.DialogResult = DialogResult.Ignore Then 'ここで何らかの処理? End If End If <frmBのコード> Select Case MessageBox.Show("システムを終了しますか?", _ "終了確認", MessageBoxButtons.YesNo, _ MessageBoxIcon.Question) Case DialogResult.Yes Me.Dispose() Application.Exit() Case DialogResult.No DialogResult = DialogResult.Ignore Exit Sub End Select で、問題はfrmBでのメッセージボックスで”いいえ”を選択した時に frmBが閉じてfrmAも終了してしまいます。 希望する動作としましては、”いいえ”を選択した時には 当該メッセージボックスを閉じるだけでfrmAを表示したままにしたいのです。 どのようにすれば実装可能なのでしょうか? ご教示頂けるとあり難いです。 宜しくお願い致します。 | ||||
|
投稿日時: 2004-07-21 06:17
諸農です。
普通に処理の流れを追えばうまくいくのではないでしょうか?? メインフォーム(frmA)の処理 1.サブフォーム(frmB)をShowDialog()で呼び出す。 戻り値がDialogResult.Cancel以外であればClose()する。 サブフォーム(frmB)の処理 2.ダイアログをYesNoのボタン付きで呼び出す。 戻り値がYesの場合は、サブフォームのDialogResultにダイアログの戻り値をセットする。 サブフォームをClose()する。 C#ですけど。。。
_________________ 諸農和岳 Powered by Turbo Delphi & Microsoft Visual Studio 2005 十兵衛@わんくま同盟 http://blogs.wankuma.com/jubei/ | ||||
|
投稿日時: 2004-07-21 10:14
===>諸農様
早速のレス、ありがとうございます。 ご教示頂いたC#のコードをもとに下記のようにVBで実装してみました。 frmAにて If frmB.ShowDialog(Me) <> DialogResult.Cancel Then MsgBox("pass(1)") frmB.Close() End If MsgBox("pass(2)") frmBにて Select Case MessageBox.Show("システムを終了しますか?", _ "終了確認", MessageBoxButtons.YesNo, _ MessageBoxIcon.Question) Case DialogResult.Yes DialogResult = DialogResult.Abort End Case DialogResult.No DialogResult = DialogResult.Cancel MsgBox("pass(0)") End Select トレースのためにメッセージボックスを表示させてみましたところ、 モーダルで表示しているfrmBの終了確認ダイアログで”いいえ” を押下した時にちゃんと"pass(0)"⇒"pass(2)"を通過しているのですが やはりfrmBが閉じてしまいます。 うーん、なぜなんでしょうか… | ||||
|
投稿日時: 2004-07-21 10:30
ん?frmAが閉じてしまうんじゃなくて、frmBが閉じてしまうって話ですか? ※単なる書き間違えですかね?まあそうとして… frmAの、frmBを表示しているメソッド全体はどうなっていますか? 単純に考えると、frmBを表示する以外の処理が問題になっているように思えるんですが。 | ||||
|
投稿日時: 2004-07-21 11:17
クリスです。
ちょっとどういう処理をしたいのか、いまいち分からないのですが @frmAからfrmBをモーダルで開く AfrmBは2択のダイアログを表示する Bダイアログの片方の選択はアプリケーションの終了 Cもう片方の選択はダイアログだけを閉じる という事をしたいのならこんな感じのコードでは駄目ですか?
的をはずした回答だったらごめんなさい。 #「の」が多かったので修正。 [ メッセージ編集済み 編集者: クリス 編集日時 2004-07-21 11:48 ] | ||||
|
投稿日時: 2004-07-21 11:40
===>なちゃ様
レス、ありがとうございます。 >frmAが閉じてしまうんじゃなくて、frmBが閉じてしまうって話ですか? そうです。 >frmAの、frmBを表示しているメソッド全体はどうなっていますか? 下記のようになってます。 Module Main Sub Main() Dim frmA As New frmA Application.Run(frmA) End Sub End Module frmAにて Private Sub cmdStart_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdStart.Click Dim frmB As New frmB If frmB.ShowDialog(Me) <> DialogResult.Cancel Then frmB.Close() End If End Sub frmBにて Private Sub cmdEnd_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdEnd.Click Select Case MessageBox.Show("システムを終了しますか?", _ "終了確認", MessageBoxButtons.YesNo, _ MessageBoxIcon.Question) Case DialogResult.Yes Me.Dispose() Application.Exit() Case DialogResult.No DialogResult = DialogResult.Ignore End Select End Sub | ||||
|
投稿日時: 2004-07-21 11:43
===>クリス様
レスありがとうございます。 つたない説明をご理解頂き恐縮です。 私のやりたいことはまさにご指摘の通りです。 申し訳ありませんが、私今から外出で今日は戻れませんので 明日、ご教示頂いた方法をテストしてみて その結果をアップさせて頂きたく。 どうもありがとうございました。 | ||||
|
投稿日時: 2004-07-21 14:33
いろいろと認識に問題がありそうな気もしますが…
まず、ShowDialogで表示した場合、その後のコード部分には、表示したフォームが消えるまで戻ってきません。つまり、ShowDialog以降が実行されていてかつフォームが表示されたままというのはありえません。 例えば、 > モーダルで表示しているfrmBの終了確認ダイアログで”いいえ” > を押下した時にちゃんと"pass(0)"⇒"pass(2)"を通過しているのですが > やはりfrmBが閉じてしまいます。 という部分について、frmBが閉じずにpass(2)を通過することはありえないということです(かならずfrmBが閉じた後(もしくは消えた後)で通過します)。 frmBが閉じてしまうのが問題という話なら、単にDialogResultへの代入をやめればいいだけです。この場合は、当然ながらfrmBは閉じませんから、ShowDialogの後ろには戻ってきません(frmBを閉じるまでは)。 |