| 
                ■No65577 (ひろ さん) に返信
> private void pageSetupDialog1_PrintPage(object sender, System.Drawing.Printing.PrintPageEventArgs e)
> {
>    int ypos = e.MarginBounds.Top;
> 上記の e.MarginBounds.Top には、どこで設定した値が入るのでしょうか。
そもそも上記は実行されません。
PageSetupDialog には PrintPage イベントが無いからです。
> 余白設定とe.MarginBounds は違うのですか?
PrintDocument.DefaultPageSettings は、既定のページ設定を表します。
ページごとに異なる設定をしたいような場合には、
QueryPageSettings イベントで e.PageSettings を調整すれば、
PrintPage イベントの引数に反映されます。
UI 指定が必要な場合には PageSetupDialog を使うことも
できますが、今回はプログラムから値を指定したいのですよね?
■No65583 (ひろ さん) に返信
> では、余白を小さくして印刷領域を広くするには
> 同設定したらいいのでしょうか。
PageSettings クラスの Marings プロパティです。
private void button1_Click(object sender, EventArgs e)
{
    // ここの値を変えてみよう!
    printDocument1.DefaultPageSettings.Margins
        //= new Margins(100, 100, 100, 100);
         = new Margins(10, 10, 10, 10);
    // この値も変えてみよう!
    printDocument1.OriginAtMargins = true;
    
    printDocument1.Print();
}
private void printDocument1_PrintPage(object sender, PrintPageEventArgs e)
{
    using (Brush b = new SolidBrush(Color.FromArgb(128, Color.Red)))
    using (Pen p = new Pen(b, 80))
    {
        e.Graphics.DrawRectangle(p, e.PageBounds);
    }
    using (Brush b = new SolidBrush(Color.FromArgb(128, Color.Blue)))
    using (Pen p = new Pen(b, 80))
    {
        e.Graphics.DrawRectangle(p, e.MarginBounds);
    }
    using (Font f = new Font("MS Gothic", 12))
    {
        var draw = new Action<Point, Brush, string>((p, b, s) =>
        {
            e.Graphics.DrawString(s, f, b, p);
        });
        var pos = e.MarginBounds.Location;
        draw(pos, Brushes.Black,
            String.Format("PrintDocument.OriginAtMargins={0}", 
            this.printDocument1.OriginAtMargins));
        pos.Offset(0, 50);
        draw(pos, Brushes.DarkGreen,
            String.Format("PageSettings.HadMarginXY=({0}, {1})", 
            e.PageSettings.HardMarginX,
            e.PageSettings.HardMarginY));
        pos.Offset(0, 50);
        draw(pos, Brushes.DarkGreen,
            String.Format("PageSettings.Margins={0}",
            e.PageSettings.Margins.ToString()));
        pos.Offset(0, 50);
        draw(pos, Brushes.Red,
            String.Format("PageBounds={0}",
            e.PageBounds.ToString()));
        pos.Offset(0, 50);
        draw(pos, Brushes.Blue,
            String.Format("MarginBounds={0}",
            e.MarginBounds.ToString()));
    }
}
大抵のページプリンタには、印刷不可能領域が存在するため、上記では
DrawRectangle の際に、極太(幅=80)の Pen を利用しています。
(PDF プリンタや XPS プリンタだと、ハード余白が0だったりしますが)
極太線であるがため、PageBounds の線と MarginBounds の線とが
重なることがあるため、それぞれ、半透明赤と半透明青の線で
描画しています。(重なったところは紫になる予定)
なので、試すときにはカラープリンターの方が分かりやすいかも。
  |