- ベストアンサー
Visual Studio .NET 2003:右揃え印刷の設定(その2)
フォーム上に表示されている各項目を印刷したいのですが、左揃えの文字は普通に座標指定するだけで問題ないのですが、桁数の違う数字を右揃えで統一して印刷したい場合の方法を教えていただきたく、よろしくお願いいたします。 以前、上記の内容の質問をさせていただきましたところ、String.Formatを使えばよいとのご回答をいただきました。いろいろと調べてみたのですが、実際にどのようにコードに記述すればよいのかがわからずにおります。現在、フォーム上の項目のうち、数値が入力されている項目を印刷するためのコードを次のように記述しています。 '数値の印刷位置 e.Graphics.DrawString(Suuchi1.Text, New Font("MS ゴシック", 12), New SolidBrush(Color.Black), 380, 100) e.Graphics.DrawString(Suuchi2.Text, New Font("MS ゴシック", 12), New SolidBrush(Color.Black), 380, 150) e.Graphics.DrawString(Suuchi3.Text, New Font("MS ゴシック", 12), New SolidBrush(Color.Black), 380, 200) e.Graphics.DrawString(Suuchi4.Text, New Font("MS ゴシック", 12), New SolidBrush(Color.Black), 380, 250) e.Graphics.DrawString(Suuchi5.Text, New Font("MS ゴシック", 12), New SolidBrush(Color.Black), 380, 300) 'ここまで これらの数値を右揃えで印刷したい場合、どのようにコードを記述したらよいのか、アドバイスを願います。上記のコードよりももっとスマートなコード記述で、私が望んでいる様な印刷結果を実現できるようでしたら、ご教授のほどよろしくお願いいたします。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
(回答No.1の補足への回答です) e.Graphics.DrawString(Suuchi1.Text, New Font("MS ゴシック", 12), New SolidBrush(Color.Black), 380, 100) となっているところを e.Graphics.DrawString(Suuchi1.Text, New Font("MS ゴシック", 12), New SolidBrush(Color.Black), 380 - e.Graphics.MeasureString(Suuchi1.Text, New Font("MS ゴシック", 12)).Width, 100) と変更(追加)すると、「座標(380,100)から左詰」が、「座標(380,100)まで右詰」に変わるかと思います。
その他の回答 (3)
- BLUEPIXY
- ベストアンサー率50% (3003/5914)
#2> Suuchi1.Textの中身は、結局文字列ですので、決めた文字数の幅にしてやればいいです。 例えば、 Suuchi1.Textに"1234"が入っていて、10文字の幅を持たせたいという場合 Suuchi1.Textに直接変更すると、内容が変わってしまいますから出力用の変数を用意して Dim outStr as String outStr=String.Format("{0,10}",Suuchi1.Text)) e.Graphics.DrawString(outStr, New Font("MS ゴシック", 12), New SolidBrush(Color.Black), 380, 100) というようにしてやればいいと思います。
お礼
何度もご回答をいただき、ありがとうございます。 String.Formatでの対処法、現在なぜかセンター揃えになってしまっているのですが、String.Formatでの右揃えもできるよう、いろいろ試してみます。 とりあえず、現在は回答No.1&No.4様に教えていただいた方法で、私が望むとおりの結果を得ることができました。 回答No.2&No.3様には質問当初からのご回答をいただき、大変感謝しています。ありがとうございます。
補足
ありがとうございます。たびたびの回答をしていただき感謝しきりです。 現在、数値の印刷結果がセンター揃えになってしまっており、苦戦しております。
- BLUEPIXY
- ベストアンサー率50% (3003/5914)
String.Formatを使うというのは、要するに、 Suuchi1~5の幅を揃えて、数値の無い部分に空白を埋めるのに使うという意味です。 なので、このまま、等幅フォントで同じ位置から書き出せばいいかと思います。 空白が他の文字と厳密には等幅にならないというようなことでしたら、この方法はうまくないです。
補足
再度のご回答ありがとうございます。 おっしゃっている内容についてはイメージできるのですが、実際のコード記述がわからずに苦労しているところです。 TextBox1.Textの数値を実際に右寄せで印刷するためのコード記述を教えていただけるとありがたいのですが。。。
- xcrOSgS2wY
- ベストアンサー率50% (1006/1985)
若干遠回りになりますが 1. Graphics.MeasureStringを使って「数値を描画した際の全体の横幅」を取得する。 2. 右揃えの座標からその横幅を減じた場所を起点として、Graphics.DrawStringで数値を描画する。 という手順ではいかがでしょうか。 この場合、String.Formatを使用する必要はありません。
補足
ご回答いただきありがとうございます。おっしゃっている内容、方法論は十分理解できるのですが、それを実際に実現するためのコードの記述がわかりません。 力不足で申し訳ありません。
お礼
ありがとうございます。ご回答いただいたコード記述で、私が望んでいたとおりの結果を得ることができました。完璧です。ほんとうにありがとうございます。感謝いたします。