プロが教える店舗&オフィスのセキュリティ対策術

C# 2010 printPreviewDialogの消去法
印刷プレビューのダイアログを表示して左上のプリンタ釦を押下して印刷します
印刷が完了してもダイアログは表示され続けています
この状態でもう一度ボタン1を押すと(1)のところで下記のエラーが起こります
『既に表示されているフォームをモーダルダイアログボックスとして表示出来ません。showDialogを呼び出す前に、フォームのVisibleプロパティをfalse
にしてください』
素直な私は(1)の前に this.printPreviewDialog1.Visible = false; を加筆して再度実行したのですが
『既にモーダルに表示されているフォームはモーダル ダイアログ ボックスとして表示できません。showDialog を呼び出す前に、フォームを閉じてください。』
とのエラーになりました
フォームを閉じろといわれても printPreviewDialog1.ShowDialog(); から戻ってきません。(2)が表示されないのです。
private void button1_Click(object sender, EventArgs e)
{
this.printPreviewDialog1.Document = this.printDocument1;
printPreviewDialog1.ShowDialog(); -----(1)
MessageBox.Show("printPreviewDialog End"); ----(2)
}
A どうしたら戻ってくるのでしょうか?
B もし戻って来ないならどのようにすれば良いのでしょうか?
更に一般的にはどのように処理しているのですか?
基礎学力の欠如している私をお助けください

「C# 2010 printPreview」の質問画像

A 回答 (2件)

元のフォームに制御が戻ってこないのに button1をクリックできてしまっているのですか?


そのほうが不思議なんですが ・・・

実際にそのエラーが出る手順を投稿してみましょう

マルチスレッドとかで別な制御が働いているのでしょうか ・・・


お好みのことを実現するには PrintDocumentのEndPrintイベントを使うことになりそうですよ

private void printDocument1_EndPrint( 引数省略 )
{
  // 引数のプロパティから印刷プレビューではない場合
  if ( e.PrintAction != System.Drawing.Printing.PrintAction.PrintToPreview )
  {
    // printPreviewDialog1が破棄されていなければ
    if ( !printPreviewDialog1.IsDisposed )
    {
      // ダイアログを閉じる
      printPreviewDialog1.Close();
    }
  }
}
といった具合になると思います
    • good
    • 0
この回答へのお礼

>元のフォームに制御が戻ってこないのに button1をクリックできてしまっているのですか?
>そのほうが不思議なんですが ・・・
ごめんなさい 説明を簡単にするために button としてしまいましたが、本当は nortifyIcon なんです
nortifyIconなら常時押下できます 不精な説明をして申し訳ありませんでした

ダイアログの閉じ方はそのまま利用させて頂いたところ、一発OKでした
ありがとうございました

お礼日時:2010/10/14 10:30

> 印刷プレビューのダイアログを表示して左上のプリンタ釦を押下して印刷します


> 印刷が完了してもダイアログは表示され続けています
> この状態でもう一度ボタン1を押すと(1)のところで下記のエラーが起こります

ボタン1を再度押す前に、このプレビューダイアログを
ダイアログの「閉じる」ボタンとか、右上のXボタンを押しても
閉じないのでしょうか?

閉じてないからエラーになっているのだと思います。

ShowDialogは表示したダイアログを閉じないと、次の行に制御が移りません。

> フォームを閉じろといわれても printPreviewDialog1.ShowDialog();
> から戻ってきません。(2)が表示されないのです。

閉じるべきフォームは、(2)で表示する(予定の)メッセージボックスではなく、
印刷プレビューのダイアログです。

この回答への補足

ご指導ありがとうございます
『ボタン1を再度押す前に、このプレビューダイアログをダイアログの「閉じる」ボタンとか、右上のXボタンを押しても閉じないのでしょうか?』
もちろん閉じるを押すとダイアログは消去され、その後にボタン1を押下しても正常に動作します
作成しているプログラムは汎用的なものであり、操作手順をあまり制限できません
閉じる釦を押さなくてもエラーが発生しない方法を模索しております
ダイアログ表示中はボタン1を消去し、ダイアログから戻ったらボタン1を再点灯することでエラーを回避することは単純ですが、これではあまりのも姑息過ぎます
printPreviewDialogは多用されていますので、一般的な方法が確立されているのではないかと思い質問させて頂いております
更なるご指導をお願い申上げる次第であります
誠にありがとうございました

補足日時:2010/10/08 18:52
    • good
    • 0
この回答へのお礼

ご指導ありがとうございました
おかげさま色々と勉強させて頂きました
今後とも宜しくお願い申しあげます
ありがとうございました

お礼日時:2010/10/14 10:22

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!