【お知らせ】プログラミング記事の投稿はQiitaに移行しました。

Windows Forms の PrintDialog

64bit環境で Windows Forms の PrintDialog が表示されないという問題に遭遇しました。

結論から言えば .NET Framework 4.0 で修正されていました。

テストコード

using System;
using System.Windows.Forms;

class Test
{
    [STAThread]
    static void Main()
    {
        Application.EnableVisualStyles();
        var f = new Form();
        var b = new Button { Text = "Test" };
        b.Click += (sender, e) =>
        {
            using (var d = new PrintDialog())
            {
                //d.UseEXDialog = true;
                d.ShowDialog(f);
            }
        };
        f.Controls.Add(b);
        Application.Run(f);
    }
}

これを .NET Framework 3.5 で AnyCPU でビルドすると64bit環境でダイアログが表示されませんが、x86 でビルドすれば表示されました。UseEXDialog のコメントを戻して有効にすれば AnyCPU でも表示されました。

.NET Framework 4.0 では AnyCPU で UseEXDialogコメントアウトしたままでも表示されました。どうやらバグとして修正されたようです。

UseEXDialog

UseEXDialog の指定での見た目の変化を貼ります。true の方が少し新しい感じがするので、バグに関係なく指定した方が良さそうです。

true

f:id:n7shi:20180315073901p:plain

false

f:id:n7shi:20180315074040p:plain