- PR -

DataGridを印刷した場合のWidthの誤差について教えて下さい

1
投稿者投稿内容
R・田中一郎
ぬし
会議室デビュー日: 2005/11/03
投稿数: 979
投稿日時: 2006-02-15 14:09
現在、DataGrid(正確には DataGridView)を印刷する処理をゴリゴリ書いています。

System.Drawing.Graphics.DrawString() にて、DataGrid.Columns(列位置).Width
の幅内に文字列を印刷させてみると、画面と同じように印刷されずに、はみ出てし
まいます。
このはみ出し方が一定ではなく、どうやら幅の大きさに比例して、はみ出る文字の
量が増えます。

これは一体どうしてなのでしょうか?

コード:

画面の場合。
・--------・------------------------------------------------------------・
|12345678|R・田中一郎R・田中二郎R・田中三郎R・田中四郎R.田中五郎|
・--------・------------------------------------------------------------・

印刷した場合。
・-------・----------------------------------------------・
|1234567|R・田中一郎R・田中二郎R・田中三郎R・田中四|
・-------・----------------------------------------------・

*実際、この値で確認したわけでは無いのですが、このような感じになります。
*各セルのWidth の値は同じです。
*最初の列では、8 のみが入らないのに対して、次の列では「R.田中五郎」
 は全てはみ出てしまっています。




一定量なら、多分幅の取り方(罫線の内側のみとか、罫線含むなど)の違いなの
だと推測できるので、その分を常に加算してやれば良いのだと思います。

しかし上記の結果は一定比率分の加算が必要に思えます。

DataGrid の幅 * 1.1 などとしても良いように思うのですが、プリンターによって
1.2 が正しかったりしそうで怖いので、きちんとした理由が知りたいのです。

解像度の問題などでしょうか?
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2006-02-15 14:21
引用:

R・田中一郎さんの書き込み (2006-02-15 14:09) より:

このはみ出し方が一定ではなく、どうやら幅の大きさに比例して、はみ出る文字の
量が増えます。


確認ですが、Font は固定ピッチフォントでかつ 1.5pt のフォントで Draw していますか?
もちろん、DataGrid のフォントと同じフォントでなければなりません。

問題の切り分けとして同様の実装で、フォームのコントロールに対して描画してみてください。
(もちろん同じ Width の Rectanble で)

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
R・田中一郎
ぬし
会議室デビュー日: 2005/11/03
投稿数: 979
投稿日時: 2006-02-15 15:14
引用:

じゃんぬねっとさんの書き込み (2006-02-15 14:21) より:

確認ですが、Font は固定ピッチフォントでかつ 1.5pt のフォントで Draw していますか?
もちろん、DataGrid のフォントと同じフォントでなければなりません。



どちらも Name = "MS ゴシック" Size=9.0 であることは確認しました。
9.0 がいけないのでしょうか?

引用:

じゃんぬねっとさんの書き込み (2006-02-15 14:21) より:

問題の切り分けとして同様の実装で、フォームのコントロールに対して描画してみてください。



申し訳ありません。やり方が良くわかりません。
どうやってやるのでしょうか?
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2006-02-15 15:39
引用:

R・田中一郎さんの書き込み (2006-02-15 15:14) より:

どちらも Name = "MS ゴシック" Size=9.0 であることは確認しました。
9.0 がいけないのでしょうか?


いえ、ベストな選択でしょう。

引用:

申し訳ありません。やり方が良くわかりません。
どうやってやるのでしょうか?


ちょっと当方で試しました。
その結果 TextBox で表示された文字列と Form 描画した文字列とではズレが生じました。
どうもコントロールと同じように描画されないみたいですね。

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
R・田中一郎
ぬし
会議室デビュー日: 2005/11/03
投稿数: 979
投稿日時: 2006-02-15 15:44
引用:

じゃんぬねっとさんの書き込み (2006-02-15 15:39) より:

引用:

申し訳ありません。やり方が良くわかりません。
どうやってやるのでしょうか?


ちょっと当方で試しました。
その結果 TextBox で表示された文字列と Form 描画した文字列とではズレが生じました。
どうもコントロールと同じように描画されないみたいですね。



試していただいたんですね。いつも本当にありがとうございます。

どちらも画面で確認した状態でズレているので解像度云々では無さそうですね。
であれば、実験しながら定数を割り出して乗じることで逃げるのもアリな気がしてきました。
この方向で試してみようと思います。
1

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