none
VS2005 drawstringの 文字列表示で2バイト文字が含まれると、マルチラインがうまく分割できない RRS feed

  • 質問

  • VS2005の VBで開発を行っています。

    印刷のプレビュー画面を作成するために、

    e.Graphics.DrawString(S, Font, Brushes.Black, rr, format1)

    を使用して文字列を表示していますが、

    文字列Sがすべて1バイト文字列の場合には、マルチラインの場合には

    同じ長さに分割されて表示されますが、

    文字列の先頭に2バイト文字列が含まれると、2バイト文字列の最後の文字の

    直前、または、1バイト2バイトの区切りで分割されてしまいます。

    何か対処方法はないでしょうか?

    以下 実証コードです。

     

    Public Class Form1

        Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
            Me.PrintPreviewDialog1.Document = Me.PrintDocument1
            PrintPreviewDialog1.WindowState = FormWindowState.Maximized

            PrintPreviewDialog1.ShowDialog()

        End Sub

        Private Sub PrintDocument1_PrintPage(ByVal sender As Object, ByVal e As System.Drawing.Printing.PrintPageEventArgs) Handles PrintDocument1.PrintPage
            Dim format1 As New StringFormat(StringFormatFlags.NoClip)
            Dim rr As Rectangle = New Rectangle(20, 20, 100, 100)
            Dim rr1 As Rectangle = New Rectangle(20, 220, 100, 100)
            Dim rr2 As Rectangle = New Rectangle(20, 420, 100, 100)
            Dim s, S1, S2 As String
            s = "ABCDEFGHIJKLMNOPQRSTUVWXYZ01234567890-01234567890ABCDEFG"
            S1 = "漢字 ABCDEFGHIJKLMNOPQRSTUVWXYZ01234567890-01234567890/ABCDEFG"
            S2 = StrConv(S1, VbStrConv.Wide)
            format1.Alignment = StringAlignment.Near
            format1.LineAlignment = StringAlignment.Center
            e.Graphics.DrawString(s, Me.Font, Brushes.Black, rr, format1)
            e.Graphics.DrawString(S1, Me.Font, Brushes.Black, rr1, format1)
            e.Graphics.DrawString(S2, Me.Font, Brushes.Black, rr2, format1)

        End Sub
    End Class

    s1を表示すると、漢字の次に改行しています。

    すべて全角文字にすると、長さで自動的に分割されます

    2007年10月18日 23:22

回答

すべての返信