0

印刷用のテンプレートとして使用するフォームを設計しました。フォームを埋めるように設計されているため、描画する前にページの余白を考慮する必要があります。

私の現在の問題は、 System.Windows.Forms.PanelコントロールをSystem.Drawing.Printing.Marginsで指定された量だけシフトさせようとしています。

private static void MarginShift(Control ctrl, Margins m) {
  Label lbl = ctrl as Label;
  if (lbl != null) {
    lbl.Location = new Point(lbl.Location.X + m.Left, lbl.Location.Y + m.Top);
  } else {
    Panel pnl = ctrl as Panel;
    if (pnl != null) {
      int x = pnl.Location.X;
      int y = pnl.Location.Y;
      pnl.Location = new Point(x + m.Left, y + m.Top);
      if ((pnl.Location.X == x) && (pnl.Location.Y == y) &&
          ((0 < m.Left) || (0 < m.Top))) {
        Console.WriteLine("WTF?");
      }
      foreach (Control c2 in pnl.Controls) {
        MarginShift(c2, m);
      }
    }
  }
}

私の小さなコンソール出力は、テンプレート フォームから渡すすべてのパネルに対してヒットします。

Microsoft のPanelコントロールのドキュメントには、Location値について次のように記載されています。

コンテナーの左上隅を基準としたコントロールの左上隅の座標を取得または設定します。

では、 Marginsを使用してPanelを移動してもLocationが移動しないのはなぜですか?

これを修正するにはどうすればよいですか?

4

1 に答える 1

1

どうでも。パネルはフォームにドッキングされました。

于 2012-08-02T15:40:29.860 に答える