|
分類:[C#]
いつも勉強させて頂いております。
皆さんのお力をお借りしたく書き込ませて頂きます。
pictureboxに文字列を描画してラインを引き、表のようなものを作成したいと考えております(最終的にはプリンターへデータを送るため……)。
テストでフォームにpictureboxとボタンを作成しました。
ボタンイベントに下記のようなサンプルを作成してみました。
文字の描画はよかったのですが、各項目を切り分けるラインがずれてきてしまい、文字にかぶってしまいます。
g.PageUnit = GraphicsUnit.Point;
部分でポイントに単位を設定したつもりなのですが、うまくいきません(間違っているかもしれません)。
単位の問題なのかと思っていますが、きちっと各項目間(空白1文字分)のセンターに罫線を引くにはどうしたらよいでしょうか?
また、pictureboxでの文字指定はフォントサイズが指定できるようですが行間の指定ができません。
基本問題ないのですが、これですと天地の項目間も罫線で切り分ける場合には行間も計算しなければなず、行間が不明なので困ってしまっています。
文字と文字の行間はどのように計算したらよいでしょうか。
質問は以上2点です。初心者ですので、詰まって先へ進めません。どうかお解りになる方、ご教示願います。
List<string> HList = new List<string>();
HList.Add("00-0000-0001 みかん 愛媛 ●○○○○●○○○○● ○○○○●○○○○●");
HList.Add("00-0000-0002 リンゴ 青森 ●○○○○●○○○○● ○○○○●○○○○●");
HList.Add("00-0000-0003 ブドウ 山梨 ●○○○○●○○○○● ○○○○●○○○○●");
int P = 10; //全角文字1文字分で10ポイント
string Lstr=string.Join("\r\n", HList);
Bitmap canv = new Bitmap(pictureBox1.Width, pictureBox1.Height);
Graphics g = Graphics.FromImage(canv);
g.PageUnit = GraphicsUnit.Point;
string drawString = @Lstr;
Font fnt = new Font("MS ゴシック", P);
RectangleF rect = new RectangleF(0, 0, 1500, 500);
g.FillRectangle(Brushes.White, rect);
g.DrawString(drawString, fnt, Brushes.Black, rect);
Pen pen = new Pen(Color.Blue);
int[] ColLine = { 6, 3, 2, 10, 10 }; //先頭の6は文字が半角のためです。
int cx = 0;
for (int i = 0; ColLine.Length - 1 >= i; i++)
{
cx += (ColLine[i]*P) + (P / 2);
g.DrawLine(pen, (cx) , 0, (cx) , 100);
}
fnt.Dispose();
g.Dispose();
pictureBox1.Image = canv;
|