
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 もし戻って来ないならどのようにすれば良いのでしょうか?
更に一般的にはどのように処理しているのですか?
基礎学力の欠如している私をお助けください

No.2ベストアンサー
- 回答日時:
元のフォームに制御が戻ってこないのに button1をクリックできてしまっているのですか?
そのほうが不思議なんですが ・・・
実際にそのエラーが出る手順を投稿してみましょう
マルチスレッドとかで別な制御が働いているのでしょうか ・・・
お好みのことを実現するには PrintDocumentのEndPrintイベントを使うことになりそうですよ
private void printDocument1_EndPrint( 引数省略 )
{
// 引数のプロパティから印刷プレビューではない場合
if ( e.PrintAction != System.Drawing.Printing.PrintAction.PrintToPreview )
{
// printPreviewDialog1が破棄されていなければ
if ( !printPreviewDialog1.IsDisposed )
{
// ダイアログを閉じる
printPreviewDialog1.Close();
}
}
}
といった具合になると思います
>元のフォームに制御が戻ってこないのに button1をクリックできてしまっているのですか?
>そのほうが不思議なんですが ・・・
ごめんなさい 説明を簡単にするために button としてしまいましたが、本当は nortifyIcon なんです
nortifyIconなら常時押下できます 不精な説明をして申し訳ありませんでした
ダイアログの閉じ方はそのまま利用させて頂いたところ、一発OKでした
ありがとうございました
No.1
- 回答日時:
> 印刷プレビューのダイアログを表示して左上のプリンタ釦を押下して印刷します
> 印刷が完了してもダイアログは表示され続けています
> この状態でもう一度ボタン1を押すと(1)のところで下記のエラーが起こります
ボタン1を再度押す前に、このプレビューダイアログを
ダイアログの「閉じる」ボタンとか、右上のXボタンを押しても
閉じないのでしょうか?
閉じてないからエラーになっているのだと思います。
ShowDialogは表示したダイアログを閉じないと、次の行に制御が移りません。
> フォームを閉じろといわれても printPreviewDialog1.ShowDialog();
> から戻ってきません。(2)が表示されないのです。
閉じるべきフォームは、(2)で表示する(予定の)メッセージボックスではなく、
印刷プレビューのダイアログです。
この回答への補足
ご指導ありがとうございます
『ボタン1を再度押す前に、このプレビューダイアログをダイアログの「閉じる」ボタンとか、右上のXボタンを押しても閉じないのでしょうか?』
もちろん閉じるを押すとダイアログは消去され、その後にボタン1を押下しても正常に動作します
作成しているプログラムは汎用的なものであり、操作手順をあまり制限できません
閉じる釦を押さなくてもエラーが発生しない方法を模索しております
ダイアログ表示中はボタン1を消去し、ダイアログから戻ったらボタン1を再点灯することでエラーを回避することは単純ですが、これではあまりのも姑息過ぎます
printPreviewDialogは多用されていますので、一般的な方法が確立されているのではないかと思い質問させて頂いております
更なるご指導をお願い申上げる次第であります
誠にありがとうございました
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) ユーザーフォーム「frm_基本❶」を立ち上げると新規で入力する行数を右下のNoとして表示しています。 1 2023/03/16 19:02
- その他(データベース) Accessフォームからパラメーターで表示したレコードを指定のExcelのセルへ転送する方法について 2 2022/08/22 18:04
- C言語・C++・C# C#テキストボックスの文字を配列にいれてその後表示する 4 2022/07/17 04:47
- JavaScript 入力フォームの javascript で メールアドレスの正規チェックをを行い、ボタンをクリックして 2 2022/04/27 16:06
- HTML・CSS ボタンをクリックした時に、入力フォームのすぐ下部に、「入力欄が空白です」というテキストメッセージが表 1 2022/04/27 16:25
- Visual Basic(VBA) VBA 参照先で選んだファイルをコピーし、出力先に別名で保存したい 8 2022/05/13 20:37
- Visual Basic(VBA) Excelのマクロコードについて教えてください。 1 2022/06/19 10:08
- JavaScript 空白で入力フォームのボタンをクリックしたら、ブラウザの上部からjavascriptで 表示されるアラ 1 2022/05/20 11:16
- JavaScript フォームが空欄の時にフォームの外をクリックすると、エラーが出るコードを調べています。 1 2023/06/25 11:51
- JavaScript ラジオボタンによるフォームの開閉を行いたい 3 2022/03/31 21:30
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ユーザーフォームを表示中にシ...
-
ACCESSのフォーム、開くんです...
-
ユーザーフォーム上に現在日時...
-
コントロールの存在確認
-
ExcelVBAのユーザーフォームの...
-
VB2005別フォームでのGIF動画の...
-
Microsoft Formsの「個人情報や...
-
テキストボックス入力データの...
-
ExcelVBAのユーザーフォームでe...
-
VBAのテキストフォームの折り返...
-
モードレスでユーザーフォーム...
-
エクセルのチェックボックスの...
-
【VBAユーザーフォームで閉じる...
-
(Excel+VBA)ユーザーフォームの...
-
C# formの2重起動禁止
-
フォームを画面のど真ん中に表...
-
[VB6.0]フォーム上に配置したコ...
-
EXCEL VBA ユーザーフォームの...
-
ブックをCloseまたはQuitで閉じ...
-
'ユーザーフォーム右上隅の[×...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ユーザーフォームを表示中にシ...
-
ExcelVBAのユーザーフォームの...
-
Form_Load と Form_Activate の...
-
VBAでユーザーフォームを再表示...
-
Microsoft Formsの「個人情報や...
-
クリックイベントなのに、2回ク...
-
ユーザーフォームのテキストボ...
-
ユーザーフォーム上に現在日時...
-
ACCESSのフォーム、開くんです...
-
エクセルのチェックボックスの...
-
エクセルVBAのフォームを最...
-
VB.NETでフォームロード中のエ...
-
EXCEL VBA ユーザーフォームの...
-
VBA(エクセル)のユーザー...
-
【Excel VBA】ユーザフォームを...
-
Hideについて(.NET)
-
(Excel+VBA)ユーザーフォームの...
-
モーダルフォームとモードレス...
-
VBA コンボボックスとテキスト...
-
アクセス2013 フォームが...
おすすめ情報