投稿者 るきお  (社会人) 投稿日時 2013/3/31 15:29:29
続きです。

    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click

        Dim table As New DataTable
        table.Columns.Add("Naming"GetType(String))
        table.Columns.Add("PostalNo"GetType(String))
        table.Columns.Add("Address"GetType(String))
        table.Columns.Add("Year"GetType(Integer))
        table.Columns.Add("Sex"GetType(String))

        table.Rows.Add("徳川家康""111-1111""千代田区千代田1-1", 40, "男")
        table.Rows.Add("楠正成""222-2222""奈良県吉野市1-100", 30, "男")
        table.Rows.Add("後桜町天皇""222-2222""京都府1-1", 20, "女")

        Dim report As Bitmap = DrawReport(New Size(640, 800), table)

        PictureBox1.Image = report

    End Sub

    Private sjis As System.Text.Encoding = System.Text.Encoding.GetEncoding("shift_jis")
    ''' <summary> 
    ''' 文字列が指定された幅になるようにスペースを埋め込みます。 
    ''' 文字列のサイズはShiftJISに換算して計算します。 
    ''' <para>指定された文字列が幅を上回る場合の処理は未実装です。</para> 
    ''' </summary> 
    ''' <param name="value">対象の文字列。</param> 
    ''' <param name="size">幅。通常の印字領域の幅をバイト数で指定します。</param> 
    ''' <param name="align">右寄せか左寄せか。スペースを埋め込む方向を変化させます。</param> 
    Private Function Fit(value As String, size As Integer, align As LeftRightAlignment) As String

        Dim byteCount As Integer = sjis.GetByteCount(value)

        If size = byteCount Then
            '領域のサイズと実際の値のサイズが一致する場合何もする必要なし。 
            Return value
        ElseIf size < byteCount Then
            '領域のサイズより実際の値のサイズが大きい場合。 
            '実際の値を切り詰めて表示するか、領域サイズを広げるなど仕様変更が必要。 
            'ここでは仮にこのまま返す。(=がたがたになる。) 
            Return value
        Else
            '領域のサイズより実際の値のサイズが小さい場合。 
            '領域サイズになるように" "をくっつけて返す。 
            Dim result As String
            Dim padding As New String(" "c, size - byteCount)
            If align = LeftRightAlignment.Left Then
                result = value & padding
            Else
                result = padding & value
            End If
            Return result
        End If

    End Function

End Class



問題の個所以外で私が整理したポイント。
・Try ~ Catch で未知の例外をキャッチしないでください。(例外が発生したときは例外を返してください。想定していない例外が発生した場合、処理を続行しても問題が発生しないことが保証できません。ログに出力したい場合は、アプリケーションイベントのUnhandledExceptionイベントを使用すると良いと思います。デバッグなしで実行すると機能します。)
・変数の名前がわかりにくいように感じました。data(rowcounter)("Naming")、strlist(0)、datalist(0)の役割文体が不明瞭だったため整理しました。


なお、今回のような投稿をされる場合は、
プログラムをコピー&貼り付けすればすぐに実行できる状態にすると回答者が多くなると思います。
私の例で行くとButton1_Clickがあった方がよいということです。

たかくんさんのプログラムを試すためには回答者が自分でButton1_Clickを作る必要があり手間です。
熟練のプログラマはプログラムをみただけで回答してくれると期待されているかもしれませんが、明確なビルドエラーでもなければそれはたいてい無理です。