C# と VB.NET の質問掲示板

わんくま同盟

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

ツリー一括表示

TexctBoxRenderer が使えなくなる原因 /Ainax (17/10/11(Wed) 15:00) #85338
Re[1]: TexctBoxRenderer が使えなくなる原因 /Azulean (17/10/11(Wed) 21:51) #85341


親記事 / ▼[ 85341 ]
■85338 / 親階層)  TexctBoxRenderer が使えなくなる原因
□投稿者/ Ainax (1回)-(2017/10/11(Wed) 15:00:06)

分類:[.NET 全般] 

Windows 10 x64 Vs Community 2013 C#

下記コードで、プリンタダイアログを表示後に TextBoxRenderer の IsSupported を確認すると False が返ってきてしまいます。
プリンタダイアログ表示前は IsSupported も True が返って来て描画もうまく行っています。
プリンタダイアログ表示後は、IsSupported を無視して描画に進もうとすると、
「クライアント領域で Visual スタイルが現在無効に設定されているため、Visual スタイルに関連する操作でエラーが発生しました。」
とエラーが発生してしまいます。
試しに、描画処理前に Application.EnableVisualStyles(); を入れてみましたが、同じエラーが発生しました。

描画処理部のコード:
        private void Render()
        {
            Bitmap canvas = new Bitmap(pictureBox1.Width, pictureBox1.Height);
            Graphics g = Graphics.FromImage(canvas);

            if (TextBoxRenderer.IsSupported)
            {
                Rectangle textBoxRect = new Rectangle(0, 0, 200, 50);
                TextFormatFlags textBoxFormat = TextFormatFlags.TextBoxControl;
                TextBoxRenderer.DrawTextBox(g, textBoxRect,
                    "テキストボックス", new Font("MS UI Gothic", 20), textBoxFormat,
                    System.Windows.Forms.VisualStyles.TextBoxState.Normal);
            }else
            {
                MessageBox.Show("no-Suported");
            }

            g.Dispose();

            pictureBox1.Image = canvas;
        }

プリントダイアログ表示部:
        private void プリントダイアログPToolStripMenuItem_Click(object sender, EventArgs e)
        {
            System.Drawing.Printing.PrintDocument pd =
                new System.Drawing.Printing.PrintDocument();

            

            pd.PrintPage +=
                new System.Drawing.Printing.PrintPageEventHandler(pd_PrintPage);

            PrintDialog pdlg = new PrintDialog();
            pdlg.Document = pd;

            

            if (pdlg.ShowDialog() == System.Windows.Forms.DialogResult.OK)
            {
                // pd.Print();
            }
        }

なお、同様のエラーが発生するパソコンとしないパソコンがあり、発生しないパソコンには Konicaminolta の
プリンタドライバが入っておりません。
エラーが発生するパソコンには C224 や C554 のドライバが入っております。

このドライバが原因でしょうか?

[ □ Tree ] 返信 編集キー/

▲[ 85338 ] / 返信無し
■85341 / 1階層)  Re[1]: TexctBoxRenderer が使えなくなる原因
□投稿者/ Azulean (875回)-(2017/10/11(Wed) 21:51:14)
No85338 (Ainax さん) に返信
> なお、同様のエラーが発生するパソコンとしないパソコンがあり、発生しないパソコンには Konicaminolta の
> プリンタドライバが入っておりません。
> エラーが発生するパソコンには C224 や C554 のドライバが入っております。
>
> このドライバが原因でしょうか?

可能性は高いでしょうね。

EnableVisualStyles は Windows XP から追加されたテーマを適用するという宣言をするものです。
しかしながら、Win32API の世界に降りると、このコントロールには適用しないと言った細かな制御やテーマの適用をやめると言った細かな制御ができるようになっています。
推測となりますが、そのプリンターで印刷する際に呼び出される処理によって、テーマが無効化され、TextBoxRenderer が機能しなくなるのでしょう。

基本的に、アプリケーションとしてできることはないと考えた方が良いです。
(無効化されたテーマを復旧させるみたいな奪い合いはいい結果を生みませんし、環境依存のコードとなるのでちゃんと動いていた環境で悪影響が出る可能性も否定できません)
[ 親 85338 / □ Tree ] 返信 編集キー/


管理者用

- Child Tree -