北の窓から(芦田っち)

PC関連と私的雑感のブログ。
2015年7月10日、カッコ内に名前を加えました。昔の友だちに気付いてほしくて・・・

【VB.NET】 プリンター選択、用紙選択のコンボボックス

2014-11-03 11:33:54 | 北窓舎
ソフトをバージョンアップ中・・・

インストールされているプリンターと使用可能な用紙をコンボボックスに収めたいと思いました。
プリンターと用紙を選択するための ComboBox です。

フォーム上ではこんな感じです。
(cmb_Printer, cmb_PaperName)
  

以下にコードをご紹介します。

なお、プリンター名を収めるコンボボックスと用紙名を収めるコンボボックスは
上図のように cmb_Printer, cmb_PaperName としてあらかじめフォーム上に作っているものとします。

また、PrintDocument がフォームに追加されていて、
Private printDoc As New System.Drawing.Printing.PrintDocument
の変数宣言を行っているものとします。

1.インストールされているプリンターを cmb_Printer に格納する

  --------------------------------------------------------
  ' --- インストールされているプリンターを ComboBox に追加
  For Each prtItem As String In System.Drawing.Printing.PrinterSettings.InstalledPrinters
     me.cmb_Printer.Items.Add(prtItem)
  Next
  ' --- 通常使用するプリンター名を取得
  Dim defaultPrinterName As String = me.printDoc.PrinterSettings.PrinterName
  ' --- 通常使用するプリンターを ComboBox の選択肢とする(● FindString で直接検索:戻り値は index)
  me.cmb_Printer.SelectedIndex = me.cmb_Printer.FindString(defaultPrinterName)
  --------------------------------------------------------

  # cmb_Printer の初期値として、通常使用するプリンターを表示するようにしています。   

2.使用可能な用紙名を cmb_PaperName に格納する

  --------------------------------------------------------
  private sub prc_Prepare_PaperName()
    Dim itmCnt As Integer = me.printDoc.PrinterSettings.PaperSizes.Count ' -- 使用可能な用紙の数
    Dim aryPaperName() As String ' -- 用紙名を収める配列(文字型)
    ReDim aryPaperName(itmCnt - 1) ' -- 配列の要素数を決める
    ' --- 用紙名前を配列に格納
    For idx As Integer = 0 To itmCnt - 1
      aryPaperName(idx) = me.printDoc.PrinterSettings.PaperSizes.Item(idx).PaperName
    Next
    ' --- 配列をソートして、ComboBox に格納
    Array.Sort(aryPaperName)
    For idx As Integer = 0 To itmCnt - 1
      me.cmb_PaperName.Items.Add(aryPaperName(idx)) ' -- 使用可能な用紙名を ComboBox に追加
    Next
    ' --- A4 を用紙種類の選択肢とする(● FindString で直接検索:戻り値は index)
    me.cmb_PaperName.SelectedIndex = me.cmb_PaperName.FindString("A4")
  End Sub    
  --------------------------------------------------------

    # cmb_PaperName の初期値として A4 を表示するようにしています。   

通常使用するプリンターは「MFC-8380DN Printer」なので、
フォームのロード後にはコンボボックス上でもそれが表示されています。

  プリンターの選択・・・
    

  用紙の選択・・・
    


さて、プリンターにより使用可能な用紙は異なります。
なので、プリンターの選択が変わったら、
用紙のコンボボックス(cmb_PaperName)の項目も変える必要があります。

この部分は次のようにしました。

3.プリンターが変わったら、使える用紙名を変える

  --------------------------------------------------------
  ' -- [プリンター]コンボボックス:選択肢が変わった
  Private Sub cmb_Printer_SelectedIndexChanged(sender As Object, e As EventArgs) _
    Handles cmb_Printer.SelectedIndexChanged

    me.printDoc.PrinterSettings.PrinterName = Me.cmb_Print_Printer.Text ' -- プリンター名を設定
    Me.cmb_Print_PaperName.Items.Clear() ' -- 既存項目を削除
    Call me.prc_Prepare_PaperName() '-- 使用可能な用紙名を ComboBox に格納
  End Sub
  --------------------------------------------------------

  末尾の prc_Prepare_PaperName の中身は、
  「2.使用可能な用紙名を cmb_PaperName に格納する」です。

プリンターの選択肢を MFC-838DN から Adobe PDF に変えると
選択できる用紙も変わってきます。
  


# 変数名やコントロール名はオヤヂ的命名(一般的でないかも)にしています。
  また、実際のコードは上と同一ではありません。
  動作を保証するものでもありませんが、参考にはなると思います。


ブログ記事についてのお問い合わせは「質疑応答 掲示板」で・・・




ここをクリックして、北窓舎のサイトにもお立ち寄りください・・・
コメント (2)    この記事についてブログを書く
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする
« 抱き合わせインストール (2) ... | トップ | Nexus 7 (2013) 奮闘記 -66- ... »
最新の画像もっと見る

2 コメント

コメント日が  古い順  |   新しい順
使います (平山)
2017-07-20 11:12:24
仕事でたまに使わせてもらってます。
ありがとございます。
返信する
お礼 (北窓舎のオヤヂ)
2017-07-20 11:18:51
「平山」さん、
コメントしていただき、ありがとうございました。ご参考になり、嬉しい限りです。このようなコメントが記事作成の励みになります。

こんなことができれば良いなぁ・・・などのご要望もお待ちしております。それが実装済みの機能なら喜んで公開させていただきます。
返信する

コメントを投稿

ブログ作成者から承認されるまでコメントは反映されません。

北窓舎」カテゴリの最新記事