none
PrintPreviewDialogでホイールマウスでスクロールできない RRS feed

  • 質問

  • お世話になります。

    PrintPreviewDialogを使用しているのですが、ホイールマウスでスクロールができません。Wordのプレビューのようにマウス操作でスクロールやズームを行いたいのですが、どなたかご存知の方いませんでしょうか?

    また、プレビュー作成中に「プレビューを生成しています。」っていう小さいダイアログが表示されるのですが、このダイアログのタイトルとメッセージの変更についても、ご存知の方いましたらよろしくお願いします。

    2006年6月13日 6:48

回答

  •  辛島 さんからの引用

    PrintPreviewDialogのMouseWheelイベントで、
    PrintPreviewDialog内の
     ・PrintPreviewControlのZoomプロパティを設定する
     ・privateフィールド「menu」(ContextMenu)の
      対象メニューのPerformClickメソッドを呼び出す(1.0の場合)
    等で、できないでしょうか?

    元質問主ではありませんが、できました。ありがとうございます。
    PrintPreviewControl プロパティが提供されていたなんて orz

    参考までに、ホイールによるページスクロールの確認に使ったコードを載せておきます。

                printPreviewDialog1.MouseWheel += new MouseEventHandler(printPreviewDialog1_MouseWheel);

            void printPreviewDialog1_MouseWheel(object sender, MouseEventArgs e)
            {
                PrintPreviewDialog dialog = (PrintPreviewDialog)sender;
                int pageCount = e.Delta / -120;
                if ((dialog.PrintPreviewControl.StartPage + pageCount) < 0)
                    pageCount = 0;

                dialog.PrintPreviewControl.StartPage += pageCount;
            }

    -120 の値はホイールの回転数なので、システム設定によって値が異なるはずです。上記のコードは手を抜いていますので注意してください。

    2006年6月19日 13:14

すべての返信

  • PrintPreviewDialog クラスを継承して WndProc メソッドをオーバーライドすれば・・・と思いつき、試してみましたがダメでした。PrintPreviewDialog クラスはダイアログとして完結する設計のようで、ページ移動やズームのプロパティが提供されていません。

    PrintPreviewControl コントロールを使用して、似た機能を持つダイアログを作るしか方法はないように思います。

    2006年6月18日 9:46
  •  べりぃ さんからの引用

    PrintPreviewDialogを使用しているのですが、ホイールマウスでスクロールができません。Wordのプレビューのようにマウス操作でスクロールやズームを行いたいのですが、どなたかご存知の方いませんでしょうか?

    PrintPreviewDialogのMouseWheelイベントで、
    PrintPreviewDialog内の
     ・PrintPreviewControlのZoomプロパティを設定する
     ・privateフィールド「menu」(ContextMenu)の
      対象メニューのPerformClickメソッドを呼び出す(1.0の場合)
    等で、できないでしょうか?

    # 因みに、.NET Frameworkのバージョンをいくつでしょうか?

    2006年6月18日 17:34
  •  辛島 さんからの引用

    PrintPreviewDialogのMouseWheelイベントで、
    PrintPreviewDialog内の
     ・PrintPreviewControlのZoomプロパティを設定する
     ・privateフィールド「menu」(ContextMenu)の
      対象メニューのPerformClickメソッドを呼び出す(1.0の場合)
    等で、できないでしょうか?

    元質問主ではありませんが、できました。ありがとうございます。
    PrintPreviewControl プロパティが提供されていたなんて orz

    参考までに、ホイールによるページスクロールの確認に使ったコードを載せておきます。

                printPreviewDialog1.MouseWheel += new MouseEventHandler(printPreviewDialog1_MouseWheel);

            void printPreviewDialog1_MouseWheel(object sender, MouseEventArgs e)
            {
                PrintPreviewDialog dialog = (PrintPreviewDialog)sender;
                int pageCount = e.Delta / -120;
                if ((dialog.PrintPreviewControl.StartPage + pageCount) < 0)
                    pageCount = 0;

                dialog.PrintPreviewControl.StartPage += pageCount;
            }

    -120 の値はホイールの回転数なので、システム設定によって値が異なるはずです。上記のコードは手を抜いていますので注意してください。

    2006年6月19日 13:14