スキャナーを利用・管理する、ベースフォームを作りたいと思っています。
ベースフォームを継承したフォームを作成して、
継承フォームからモーダルダイアログを呼び出している間、
スキャナーを停止させたいと思っております。
モーダルダイアログ表示時→スキャナークローズ
モーダルダイアログ破棄時→スキャナーオープン
といった感じで、ベースフォーム側にスキャナのオープン処理・クローズ処理を記述したいのですが、
モーダルダイアログの表示・破棄をベースフォーム側で受け取ることができるイベント、もしくはウィンドウズメッセージはありませんでしょうか。
OSはWindows7, Windows10, WindowsCEを想定しております。
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答3件
0
色々と検討した結果、モーダルダイアログ表示時・破棄時ではなく、
フォームのEnableが変更されたときに、スキャナをオープン・クローズすることにしました。
実装は以下の形でやっていこうと思います。
C#
1 2 /// <summary> 3 /// ウィンドウの有効無効の変更を通知するウィンドウズメッセージ 4 /// </summary> 5 private const int WM_ENABLE = 10; 6 /// <summary> 7 /// 有効状態のWPARAM 8 /// </summary> 9 private const int WPARAM_ENABLE_WINDOW = 0x0001; 10 /// <summary> 11 /// 無効状態のWPARAM 12 /// </summary> 13 private const int WPARAM_DISENABLE_WINDOW = 0x0000; 14 15 /// <summary> 16 /// ウィンドウズメッセージを処理します 17 /// </summary> 18 /// <param name="m"></param> 19 protected override void WndProc(ref Message m) 20 { 21 //現ウィンドウの有効無効の変更通知であった場合 22 if (m.Msg == WM_ENABLE && m.HWnd == this.Handle) 23 { 24 if (m.WParam.ToInt32() == WPARAM_ENABLE_WINDOW) 25 { 26 //有効化されたとき 27 scanner.Open(); 28 } 29 else if (m.WParam.ToInt32() == WPARAM_DISENABLE_WINDOW) 30 { 31 //無効化されたとき 32 scanner.Close(); 33 } 34 } 35 base.WndProc(ref m); 36 }
ほか、ウィンドウズメッセージを使わずとも、フォームのEnableChangedイベントでも同様のことができそうです。
ありがとうございました。
投稿2018/06/06 05:37
編集2018/06/06 05:39総合スコア13
0
ベストアンサー
モーダルダイアログの表示・破棄をベースフォーム側で受け取ることができるイベント、もしくはウィンドウズメッセージはありませんでしょうか。
ないです。
代替案としては、ベースフォーム側でダイアログ表示を制御する方法が考えられます。スキャナー制御しつつダイアログ表示を行う専用のメソッドを用意し、モーダルダイアログを表示する際はそれを使うようにすれば良さそうな気がします。
例えばこんな感じのメソッドです。
C#
1public partial class MyBaseForm : Form 2{ 3 : 4 : 5 public DialogResult SpecialShowDialog(Form dialog) 6 { 7 CloseScanner(); // スキャナークローズ 8 DialogResult result = dialog.ShowDialog(); 9 OpenScanner(); // スキャナーオープン 10 return result; 11 } 12}
投稿2018/06/05 12:36
総合スコア5938
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/06/06 00:48
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。