在运行时更改Windows窗体面板位置

时间:2012-08-02 15:31:31

标签: c# windows winforms

我设计了一个用作打印模板的表单。它旨在填充表单,因此在绘制之前我必须考虑页边距。

我当前的问题是尝试让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);
      }
    }
  }
}

我从我的模板表单传递的每个Panel都会触发我的小控制台输出。

Microsoft的Panel控件文档说明Location值:

  

获取或设置控件左上角相对于其容器左上角的坐标。

那么,为什么使用Panel移动Margins不会移动Location

我需要做些什么来纠正这个问题?

1 个答案:

答案 0 :(得分:1)

没关系。小组停靠在表格上。