ソフトをバージョンアップ中・・・
インストールされているプリンターと使用可能な用紙をコンボボックスに収めたいと思いました。
プリンターと用紙を選択するための 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 に変えると
選択できる用紙も変わってきます。
# 変数名やコントロール名はオヤヂ的命名(一般的でないかも)にしています。
また、実際のコードは上と同一ではありません。
動作を保証するものでもありませんが、参考にはなると思います。
ブログ記事についてのお問い合わせは「質疑応答 掲示板」で・・・
ここをクリックして、北窓舎のサイトにもお立ち寄りください・・・
インストールされているプリンターと使用可能な用紙をコンボボックスに収めたいと思いました。
プリンターと用紙を選択するための 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 に変えると
選択できる用紙も変わってきます。
# 変数名やコントロール名はオヤヂ的命名(一般的でないかも)にしています。
また、実際のコードは上と同一ではありません。
動作を保証するものでもありませんが、参考にはなると思います。
ブログ記事についてのお問い合わせは「質疑応答 掲示板」で・・・
ここをクリックして、北窓舎のサイトにもお立ち寄りください・・・
ありがとございます。
コメントしていただき、ありがとうございました。ご参考になり、嬉しい限りです。このようなコメントが記事作成の励みになります。
こんなことができれば良いなぁ・・・などのご要望もお待ちしております。それが実装済みの機能なら喜んで公開させていただきます。