No more Death March

あるSEのチラシの裏 C# WPF

書籍「現場で役立つシステム設計の原則」を読んでみて。

7月5日に発売されたのでさっそく購入しました。

この本の著者の増田さんという方、
DDDやOOPに関する資料をSlideShareに公開していて何度も目にしていました。

流し読みしてみての感想ですが、
SlideShareの内容を書籍にまとめ、より詳しく解説を加えたものという具合です。

↓↓↓増田さんが公開している資料↓↓↓
www.slideshare.net

個人的にはとても良い本だと思う。
これから何度も読み返して頭に馴染ませて行きます。

オブジェクト指向設計を勉強しよう!」ってなって、実践DDD本やリファクタリング本を読み漁りましたが、
この本を最初に読んだ方が分かりやすかっただろうなぁ・・・

文字列からプリンタを取得

using System;
using System.Printing;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            var queueByFullName = new PrintQueue(new LocalPrintServer(), LocalPrintServer.GetDefaultPrintQueue().FullName);
            Console.WriteLine(queueByFullName.FullName);
            Console.ReadKey();
        }
    }
}

PrintQueueクラスのコンストラクタにPrintServerクラスのインスタンスとプリンタの完全名(文字列)を渡すと取得出来る。


以下のようにインストールされていないプリンタ名を指定するとSystem.Printing.PrintQueueExceptionが発生する。

using System;
using System.Printing;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            //var queueByFullName = new PrintQueue(new LocalPrintServer(), LocalPrintServer.GetDefaultPrintQueue().FullName);
            var queueByFullName = new PrintQueue(new LocalPrintServer(), "Hoge");
            Console.WriteLine(queueByFullName.FullName);
            Console.ReadKey();
        }
    }
}

インストールされているプリンターの一覧を取得する。

using System;
using System.Printing;

namespace LocalPrintersName
{
    class Program
    {
        static void Main(string[] args)
        {

            foreach(var queue in new LocalPrintServer().GetPrintQueues())
            {
                Console.WriteLine(queue.FullName);
            }
            Console.ReadLine();
        }
    }
}

LocalPrintServerのインスタンスメソッドGetPrintQueuesを実行
実行した端末のPrintQueueクラスのコレクションが返る。

後はPrintQueueクラスのプロパティを出力

既定のプリンター名を取得する。

using System;
using System.Printing;

namespace DefaultPrinterName
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("既定のプリンタは{0}です。", LocalPrintServer.GetDefaultPrintQueue().FullName);

            Console.ReadKey();
        }
    }
}

system.printingを参照設定に追加
LocalPrintServerクラスのstaticメソッドGetDefaultPrintQueueでプリンタ設定のインスタンスを取得
FullNameプロパティでプリンタ名を取得

WPFで帳票 参考リンク

ネットで色々検索してみるとWPFでも帳票印刷が出来るらしい。
後で参考に出来そうなリンクをメモ

以下参考:
WPFでの印刷の基本(1) 単一ページの印刷 - Qiita
WPFでの印刷の基本(2) 複数ページの印刷 - Qiita
WPFを帳票フレームワークとして使う - @kotyのブログ
WPF/XAMLで帳票のデザイン・印刷を行う - Qiita
[C#]プリンタ一覧と、デフォルトプリンタを取得するには
のぶろぐ WPFでの印刷

C# App.Configでエラー

DbProviderFactoriesの仕組みを勉強してて、DbProviderFactories.GetFactoryClasses()でConfigurationErrorExceptionが発生。

App.Configをよ~く見てみるとセクションの後のスペースが交っていた。
これを消してやると解消。

1時間くらい悩みました・・・