- PR -

PadLeft メソッドを使って全角文字列幅をそろえたい

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

昨日、桁数の違った数字に対して1桁位置をそろえることを教わり、固定ピッチ フォントに変更して
見事にそろえることができましたが、文字数の違った日本語全角文字列も文字列幅をPadLeft メソッド
でそろえることができるのでしょうか。Windows XP からは「MS ゴシック」等で固定ピッチとなるように
記されていますが(http://support.microsoft.com/kb/417434/ja)うまくいきません。
下にコードを記述しますので、よろしくお願いいたします。

コード:
 

Private Sub pd_PrintPage(ByVal sender As Object, _
ByVal e As System.Drawing.Printing.PrintPageEventArgs)
Dim x As Integer = 50 '----印刷開始位置
Dim y As Integer = 50
Dim f As Font = New Font("MS ゴシック", 11) '--フォント指定
Dim pi As Integer = f.Height + 3 '--印刷ピッチ
Dim SS As String

SS="あああああああ"
e.Graphics.DrawString(SS.PadRight(10," "c) & "お", f, Brushes.Black, x , y )
SS="ああああああ"
e.Graphics.DrawString(SS.PadRight(10," "c) & "お", f, Brushes.Black, x , y + (pi * 1))
SS="あああああ"
e.Graphics.DrawString(SS.PadRight(10," "c) & "お", f, Brushes.Black, x , y + (pi * 2))
SS="あああ"
e.Graphics.DrawString(SS.PadRight(10," "c) & "お", f, Brushes.Black, x , y + (pi * 3))
SS="ああ"
e.Graphics.DrawString(SS.PadRight(10," "c) & "お", f, Brushes.Black, x , y + (pi * 4))
End Sub



追記1:(10," "c)の" "は全角スペースです。
追記2:(10," "c)の c は意味がわからず、人まねでつけました。

件名の修正

[ メッセージ編集済み 編集者: 未記入 編集日時 2007-12-11 13:32 ]
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2007-12-11 13:49
引用:

未記入さんの書き込み (2007-12-11 13:27) より:

文字数の違った日本語全角文字列も文字列幅をPadLeft メソッドでそろえることができるのでしょうか。


空白も文字ですから揃えることができると考えられます。 が、

引用:

Windows XP からは「MS ゴシック」等で固定ピッチとなるように記されていますがうまくいきません。


Windows XP では 1.5 の倍数のフォント サイズを使わなくてはいけません。 印刷の場合は、それだけでなくドライバ依存という要素もあるため万全にはできません。

引用:

e.Graphics.DrawString(SS.PadRight(10," "c) & "お", f, Brushes.Black, x , y )


PadRight メソッド? 印字開始位置の基準は左端ではないのでしょうか? PadRight メソッドでは何ら意味がないように思えます。 それと件名は PadLeft メソッドになっています。 どちらなのでしょうか?

引用:

追記1:(10," "c)の" "は全角スペースです。
追記2:(10," "c)の c は意味がわからず、人まねでつけました。


'c' サフィックスを文字列の後ろにつけると Unicode 1 文字を表す System.Char 型になります。
http://msdn2.microsoft.com/ja-jp/library/dzy06xhf(VS.80).aspx

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
未記入
会議室デビュー日: 2007/10/13
投稿数: 7
投稿日時: 2007-12-11 14:28
早速ありがとうございます。それと昨日は数字の桁そろえ、大変助かりました。
引用:

Windows XP では 1.5 の倍数のフォント サイズを使わなくてはいけません。 印刷の場合は、それだけでなくドライバ依存という要素もあるため万全にはできません。



そうであれば少し面倒ですが、日本語全角文字の混じった複数項目をつなぎ合わせる行は、
次のように記述する方法でもよいのでしょうか?(一般的なのでしょうか)
S1 = "あああああああ" : S2 = "お"
e.Graphics.DrawString(S1.PadRight(10," "c) , f, Brushes.Black, x , y )
e.Graphics.DrawString(S2.PadRight(2," "c), f, Brushes.Black, x + 60 , y )

引用:

PadRight メソッド? 印字開始位置の基準は左端ではないのでしょうか? PadRight メソッドでは何ら意味がないように思えます。 それと件名は PadLeft メソッドになっています。 どちらなのでしょうか?


PadLeft メソッドです。(件名が間違いです。)
これは「あああ」の記述幅を10文字として、続く「お」の記載位置をそろえたのです。

'c' サフィックスを文字列の後ろにつけると Unicode 1 文字を表す に関して勉強します。
ありがとうございました。
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2007-12-11 15:17
引用:

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

そうであれば少し面倒ですが、日本語全角文字の混じった複数項目をつなぎ合わせる行は、次のように記述する方法でもよいのでしょうか?(一般的なのでしょうか)


繋げるなら文字列を結合して DrawString メソッドでしょう。 位置が決まっていて単に横並びになっているなら現状の方法でしょう。

引用:

PadLeft メソッドです。(件名が間違いです。)


???

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
未記入
会議室デビュー日: 2007/10/13
投稿数: 7
投稿日時: 2007-12-11 16:16
じゃんぬねっとさん。返答ありがとうございます。

引用:

繋げるなら文字列を結合して DrawString メソッドでしょう。 位置が決まっていて単に横並びになっているなら現状の方法でしょう。



とおっしゃっている意味を次のように理解しました。
1.縦列をそろえることなく、単につなげるなら文字結合してDrawString メソッドを・・
2.列の位置を縦にもそろえたいなら、面倒でも最後に例示した方法がよい。
今回の場合は縦の位置そろえも必要なもので2.で記述しようと思っています。

件名のPadLeftメソッドが間違いで、PadRightが正しいのです。再三間違えてすみません。
1

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