- PR -

PadLeft メソッドの使い方について

1
投稿者投稿内容
未記入
会議室デビュー日: 2007/10/13
投稿数: 7
投稿日時: 2007-12-10 14:29
いつも参考にさせていただいております。 以下の環境でWindowsのソフトを開発しています。
Windows XP Pro Framework 2.0 Visual Basic 2005 Expres Edition

お尋ねしたいことは、PadLeft メソッドを使って桁の違った数字を1列に並べたいのですが
下1桁の位置が少しずれて表示されます。使い方に問題あるのかと色々試してみましたが、
うまくいきません。コードを記述しますので、よろしくお願いいたします。
コード:

Private Sub pd_PrintPage(ByVal sender As Object, _
ByVal e As System.Drawing.Printing.PrintPageEventArgs)
Dim x As Integer = 100 '----印刷開始位置
Dim y As Integer = 50
Dim f As Font = New Font("MS Pゴシック", 11) '---フォント指定
Dim pi As Integer = f.Height + 3 '---印刷ピッチ
Dim ct As Integer = 0 '------------行カウンター
Dim NN As Integer '--------------印刷数字

NN = 1234567
e.Graphics.DrawString(NN.ToString("#,##0").PadLeft(20), f, Brushes.Black, x , y )
NN = 123456
e.Graphics.DrawString(NN.ToString("#,##0").PadLeft(20), f, Brushes.Black, x, y + (pi * 1))
NN = 1234
e.Graphics.DrawString(NN.ToString("#,##0").PadLeft(20), f, Brushes.Black, x , y + (pi * 2))
NN = 123
e.Graphics.DrawString(NN.ToString("#,##0").PadLeft(20), f, Brushes.Black, x , y + (pi * 3))
NN = 12
e.Graphics.DrawString(NN.ToString("#,##0").PadLeft(20), f, Brushes.Black, x , y + (pi * 4))
NN = 0
e.Graphics.DrawString(NN.ToString("#,##0").PadLeft(20), f, Brushes.Black, x , y + (pi * 5))
e.HasMorePages = False
img.Dispose()
End Sub



以上のpd_PrintPageコードを次のように印刷しています。

コード:

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As _
System.EventArgs) Handles Sub Button1.Click
Dim pd As New System.Drawing.Printing.PrintDocument
AddHandler pd.PrintPage, AddressOf pd_PrintPage
pd.Print()
End Sub



印刷部追加

[ メッセージ編集済み 編集者: 未記入 編集日時 2007-12-10 14:44 ]
れい
ぬし
会議室デビュー日: 2005/11/01
投稿数: 346
投稿日時: 2007-12-10 14:46
引用:

未記入さんの書き込み (2007-12-10 14:29) より:
Dim f As Font = New Font("MS Pゴシック", 11) '---フォント指定


「MS Pゴシック」の「P」は「プロポーショナル」の「P」です。
「MS Pゴシック」は文字ごとにサイズが異なるフォントです。

PadLeftで文字数だけそろえても、文字ごとに横幅が異なっていてはずれてしまいます。
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2007-12-10 14:46
引用:

未記入さんの書き込み (2007-12-10 14:29) より:

Dim f As Font = New Font("MS Pゴシック", 11) '---フォント指定


PadLeft メソッドの使い方に問題があるのではなく、フォントに問題があるのではないでしょうか? プロポーショナル フォントと固定ピッチ フォントの違いについて調べてみてはいかがでしょう?

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
まるく
大ベテラン
会議室デビュー日: 2004/01/09
投稿数: 181
投稿日時: 2007-12-10 14:50
桁がずれるのはフォントの半角空白のせいでは。
DrawStringのオーバーロードで、 StringFormat と Rectangle を指定できますので、調べてみてください。

参考ソース:
http://msdn2.microsoft.com/ja-jp/library/system.drawing.stringformatflags(VS.80).aspx
未記入
会議室デビュー日: 2007/10/13
投稿数: 7
投稿日時: 2007-12-10 14:58
れいさん。じゃんぬねっとさん。
早速のお返事、ありがとうござます。早速「New Font("MS Pゴシック", 11)」を
「New Font("MS ゴシック", 11)」に変更して印刷しますと見事に下1桁がそろい
ました。感動です。助かりました。

まるくさん。
ありがとうございます。ご提示いただいたサイトを勉強します。
まるく
大ベテラン
会議室デビュー日: 2004/01/09
投稿数: 181
投稿日時: 2007-12-10 23:51
あぁ、フォントはプロポーショナルでなくてもよかったのですね。よく見ればそりゃそうか。
何か先入観があってフォントタイプは変えてはいけないのかと。失礼しました。
1

スキルアップ/キャリアアップ(JOB@IT)