none
PrintPreviewDialogで印刷プレビュー RRS feed

  • 質問

  • いつもお世話になっています。

    VB2005でアプリケーションの開発をしています。

    PrintPreviewDialogで印刷プレビュー画面を作成しています。プレビュー自体はしっかり表示できていますし、印刷も問題なく出来るのですがOSがXPなどの場合にwindowsタスクバーにアプリケーションが2つ表示されるようになってしまいます。いろいろ調べてみたところ、プレビューは全て最大サイズにして表示するようにしているのですが最大サイズでプレビューを表示するとタスクバーに2個表示されてしまうようなのです。

    この現象が出るフォームと出ないフォームがあって設定内容についてはほぼ同じ様なことをしています。

    同じような現象で悩んでいる方、または解決方法をご存知の方がいらっしゃっるのであればご教授お願い致します。

    2011年7月15日 2:26

回答

  • 解決策ではないですが、
    http://dobon.net/vb/dotnet/graphics/printpreviewdialog.html
    であげられているサンプルをそのままやって、プレビューのほうを最大化しても
    とくに問題あるように思えませんでした。
    (呼び出しもとのアプリだけがタスクバーに出ています)
    XP32bit , .NET framework3.5 で試しています。

    どういう作り方して、何がタスクバーに出ているのか情報を
    提供しないとどういうことなのかわからないと思います。


    • 編集済み mars12 2011年7月15日 7:00 誤字修正
    • 回答としてマーク 山本春海 2011年7月20日 7:50
    2011年7月15日 6:41
  • 返信ありがとうございます。

    自己解決いたしましたが一応記載しておきます。

    実際にはフォーム上に表示してあるスプレッドシートを印刷する際にPrintPreviewDialogを使用しています。下記に一部抜粋して記載しておきました。

    Dim pd As New System.Drawing.Printing.PrintDocument
    Dim pi As New FarPoint.Win.Spread.PrintInfo
    '用紙サイズ
    pi.PaperSize = New System.Drawing.Printing.PaperSize(”A4”, 1169, 768)
    pi.PaperSize.RawKind = Printing.PaperKind.A4
    pi.Printer = pd.PrinterSettings.PrinterName
    pi.PaperSource = pd.PrinterSettings.PaperSources(0)

    pi.Header = strHeaderString
    pi.Colors = New Color() {Color.Black, Color.Red, Color.SeaGreen}

    '「上」「左」マージンを設定
    pi.Margin.Top = 40
    pi.Margin.Left = 40

    Dim ppd As New PrintPreviewDialog
    ppd.Text = "テスト"
    ppd.StartPosition = FormStartPosition.CenterScreen
    ppd.MinimizeBox = False
    ppd.MaximizeBox = False
    ppd.WindowState = FormWindowState.Maximized
    ppd.FormBorderStyle = Windows.Forms.FormBorderStyle.FixedSingle
    ppd.ShowIcon = False

    Dim ts As ToolStrip = CType(ppd.Controls(1), ToolStrip)
    ts.Items(3).Visible = False
    ts.Items(4).Visible = False
    ts.Items(5).Visible = False
    ts.Items(6).Visible = False
    ts.Items(7).Visible = False

    ppd.PrintPreviewControl.AutoZoom = True

    Me.Spread.SetPrintPreview(ppd)

    '印刷プレビュー
    pi.ShowPrintDialog = True
    pi.Preview = True
    Me.Spread.ActiveSheet.PrintInfo = pi
    Me.Spread.PrintSheet(Me.Spread.ActiveSheet)

    というように行っています。メインはスプレッドシートを編集していますが、印刷の部分はPrintPreviewDialogを使用しています。

    解決した理由ですが、フォームロード時の最初にMe.Visible = False フォームロード終了時にMe.Visible = Trueというのをやっていたのですがそちらをコメントアウトしたら問題なくなりました。もともと画面自体は子のフォームなので親フォームを隠したり自分を表示・非表示したりで変な事やっているのですが、ひとまず解決です。

    なぜ、フォームロード時にそのような事やっていたかは、元の開発者に経緯を聞いてみないとわから無そうです。

    ありがとうございました。

    • 回答としてマーク 山本春海 2011年7月20日 7:50
    2011年7月15日 10:32

すべての返信

  • 解決策ではないですが、
    http://dobon.net/vb/dotnet/graphics/printpreviewdialog.html
    であげられているサンプルをそのままやって、プレビューのほうを最大化しても
    とくに問題あるように思えませんでした。
    (呼び出しもとのアプリだけがタスクバーに出ています)
    XP32bit , .NET framework3.5 で試しています。

    どういう作り方して、何がタスクバーに出ているのか情報を
    提供しないとどういうことなのかわからないと思います。


    • 編集済み mars12 2011年7月15日 7:00 誤字修正
    • 回答としてマーク 山本春海 2011年7月20日 7:50
    2011年7月15日 6:41
  • 返信ありがとうございます。

    自己解決いたしましたが一応記載しておきます。

    実際にはフォーム上に表示してあるスプレッドシートを印刷する際にPrintPreviewDialogを使用しています。下記に一部抜粋して記載しておきました。

    Dim pd As New System.Drawing.Printing.PrintDocument
    Dim pi As New FarPoint.Win.Spread.PrintInfo
    '用紙サイズ
    pi.PaperSize = New System.Drawing.Printing.PaperSize(”A4”, 1169, 768)
    pi.PaperSize.RawKind = Printing.PaperKind.A4
    pi.Printer = pd.PrinterSettings.PrinterName
    pi.PaperSource = pd.PrinterSettings.PaperSources(0)

    pi.Header = strHeaderString
    pi.Colors = New Color() {Color.Black, Color.Red, Color.SeaGreen}

    '「上」「左」マージンを設定
    pi.Margin.Top = 40
    pi.Margin.Left = 40

    Dim ppd As New PrintPreviewDialog
    ppd.Text = "テスト"
    ppd.StartPosition = FormStartPosition.CenterScreen
    ppd.MinimizeBox = False
    ppd.MaximizeBox = False
    ppd.WindowState = FormWindowState.Maximized
    ppd.FormBorderStyle = Windows.Forms.FormBorderStyle.FixedSingle
    ppd.ShowIcon = False

    Dim ts As ToolStrip = CType(ppd.Controls(1), ToolStrip)
    ts.Items(3).Visible = False
    ts.Items(4).Visible = False
    ts.Items(5).Visible = False
    ts.Items(6).Visible = False
    ts.Items(7).Visible = False

    ppd.PrintPreviewControl.AutoZoom = True

    Me.Spread.SetPrintPreview(ppd)

    '印刷プレビュー
    pi.ShowPrintDialog = True
    pi.Preview = True
    Me.Spread.ActiveSheet.PrintInfo = pi
    Me.Spread.PrintSheet(Me.Spread.ActiveSheet)

    というように行っています。メインはスプレッドシートを編集していますが、印刷の部分はPrintPreviewDialogを使用しています。

    解決した理由ですが、フォームロード時の最初にMe.Visible = False フォームロード終了時にMe.Visible = Trueというのをやっていたのですがそちらをコメントアウトしたら問題なくなりました。もともと画面自体は子のフォームなので親フォームを隠したり自分を表示・非表示したりで変な事やっているのですが、ひとまず解決です。

    なぜ、フォームロード時にそのような事やっていたかは、元の開発者に経緯を聞いてみないとわから無そうです。

    ありがとうございました。

    • 回答としてマーク 山本春海 2011年7月20日 7:50
    2011年7月15日 10:32