formが終了してしまいます。


はなこ  2007-12-11 00:38:59  No: 144162  IP: 192.*.*.*

メニュー画面→印刷指示画面→ActiveReportで印刷
というプログラムを作ったのですが、印刷指示画面で印刷ボタンをclickすると印刷後、formcloseイベントが実行され印刷指示画面も終了してしまってメニュー画面に戻ってしまいます。

ヘルプも見ているのですが、探し方が悪いのか原因がわかりません。
お知恵をかしてください。

【メニュー画面】
Private Sub cmdF3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdF3.Click

    Me.Hide()
    印刷指示画面.ShowDialog()

    Me.Show()

End Sub

【印刷指示画面】
Private Sub cmdF5_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdF5.Click

      Me.Hide()

   '== 直接印刷
      rpt.Document.Printer.PrinterSettings.Copies = Val(Me.txt枚数.Text)
      rpt.Document.Print(False, True, False)

      Me.Show()

End Sub

編集 削除
特攻隊長まるるう  2007-12-12 10:15:16  No: 144163  IP: 192.*.*.*

とりあえず、[VB.NET2003 WinXp(Sp2)]で再現しませんでした。

ShowDialog ということは、いわゆるモーダルダイアログ表示なわけですが、
これは表示したフォームが非表示になるまで、呼び出し側の処理を止める。。。
裏を返せばモーダル表示のフォームが非表示になると、呼び出し側の ShowDialog
以降の処理が走ってしまう可能性があるので、あまり良いプログラムとは
言えませんね。

ただ、1つの関数内で Show() してるからうまくいく場合もあるかなぁ。。。
といった印象です。

また、ヘルプ(MSDN)を読むと
[Form.ShowDialog メソッド]
http://msdn2.microsoft.com/ja-jp/library/c7ykbedk(VS.80).aspx
>DialogResult プロパティの値を設定した場合には、Close メソッドは
> .NET Framework によって呼び出されません。その場合はフォームが
>非表示になるだけで
ですから
>formcloseイベントが実行され
は、おかしいかもしれません。DialogResult を設定されていないという場合を
考え、[VB.NET2003]でテストしましたが、Cancel が設定されており、非表示に
なってもインスタンスは残り続けました。

まずは、新規プロジェクトでテストコードを実行し、再現するか確認してください。

再現するようなら、
『印刷指示画面』が変数で宣言されていないようなので、[VB2005]でフォーム名を
直接使っているのでしょうか?。参照変数を用意して、インスタンスを明示的に
生成するようなコードでテストしてみては?

編集 削除