合計請求書(請求書の表紙)を印刷する簡単なプログラムに手を入れる(その3)

今回は
・登録した発行履歴を使って入力を簡易化する
です。

入力を簡易化するために(それだけではありませんが..)コード入力という手法がよく使われます。
ただコード決めることさえも面倒くさいことがちょくちょくありませんか?
そんな時には発行履歴を使って入力を簡易化してみましょう。
まず発行履歴を表示、選択するフォームを作成します。

FormにDataGridViewを1つ置いただけです。
「親コンテナにドッキングする」を選択しておきましょう。

これからコードを書いていきます。
まずは「発行履歴を表示、選択するフォーム」側から
  Public Class Form請求先選択
    Dim db As New database.MSAccess.DBAccess
    Dim SqlCommand As OleDb.OleDbCommand
    Dim dt As DataTable
  
    Private Sub Form_Activated(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Activated
      Call dgvFill()
    End Sub
  
    Private Sub Form_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
      AddHandler Me.FormClosing, AddressOf CommonLib.Form_FormClosing
    End Sub
  
    Private Sub dgvFill()
      SqlCommand = New OleDb.OleDbCommand("SELECT DISTINCT [宛先1行目] & [宛先2行目] AS 宛先, 宛先1行目, 宛先2行目 FROM 発行履歴 ORDER BY [宛先1行目] & [宛先2行目];")
  
      dt = db.getDataTable(SqlCommand)
  
      If IsNothing(dt) Then
        Dim ex As Exception = db.SQLException
        MsgBox("請求先の取り出しでエラーが発生しました。" & vbNewLine & ex.Message, MsgBoxStyle.Information, "")
        Exit Sub
      Else
        Try
          dgv.Columns("宛先1行目").Visible = True
          dgv.Columns("宛先2行目").Visible = True
        Catch ex As Exception
          'なにもしない
        End Try
  
        dgv.DataSource = dt.DefaultView
  
        dgv.Columns("宛先1行目").Visible = False
        dgv.Columns("宛先2行目").Visible = False
  
        Call dgvFormat()
      End If
    End Sub
  
    Private Sub dgvFormat()
      'dgvの設定
      dgv.AllowUserToResizeRows = False
  
      '-----明細行の色を変える-----
      dgv.AlternatingRowsDefaultCellStyle.BackColor = Color.LightCyan
      '----------------------------
  
      '-----明細行の選択は行選択にする-----
      dgv.SelectionMode = DataGridViewSelectionMode.FullRowSelect
      '----------------------------
  
      '-----列の各設定-----
      dgv.Columns("宛先").ReadOnly = True
  
      dgv.Columns("宛先").Width = 330
      '--------------------
  
    End Sub
  
    Private Sub dgv_DoubleClick(ByVal sender As Object, ByVal e As System.EventArgs) Handles dgv.DoubleClick
      Try
        If dgv.CurrentRow.Index = -1 Then Exit Sub
      Catch ex As Exception
        Exit Sub
      End Try
  
      If dgv.Item(1, dgv.CurrentRow.Index).Value.ToString.Length = 0 Then
        Try
          frm合計請求書発行.tb1行目.Text = ""
          frm合計請求書発行.tb1行目.Visible = False
        Catch ex As Exception
          'なにもしない
        End Try
      Else
        frm合計請求書発行.tb1行目.Text = dgv.Item(1, dgv.CurrentRow.Index).Value.ToString
        frm合計請求書発行.tb1行目.Visible = True
      End If
  
      frm合計請求書発行.tb2行目.Text = dgv.Item(2, dgv.CurrentRow.Index).Value.ToString
      frm合計請求書発行.tb今回請求金額.Focus()
  
      Me.Close()
    End Sub
  End Class

つぎに呼び出す側も書いていきます。
今回は請求先の入力欄をダブルクリックすると、選択画面が表示されるようにしました。
  Private Sub tb2行目_DoubleClick(ByVal sender As Object, ByVal e As System.EventArgs) Handles tb2行目.DoubleClick
    If IsNothing(frm請求先選択) Then
      frm請求先選択 = New Form請求先選択
      frm請求先選択.Owner = Me
    End If

    frm請求先選択.Show()
  End Sub

これで請求先の入力欄をダブルクリックすると選択画面が表示され、発行履歴の行をダブルクリックすると請求先の入力欄が入力されるようになりました。