使用锚点将面板中的usercontrol置于中心会移除滚动条?

时间:2012-04-11 12:04:43

标签: c# winforms user-controls panel anchor

在我当前的项目中,当我将usercontrol添加到panel的{​​{1}}时,我遇到了问题。我设法使用以下代码将其添加到面板中间:

splitcontainer

但是现在我的滚动条消失了,当我移除 ucFactuur ucFactuur = new ucFactuur(); ucFactuur.Location = new Point( splitContainer1.Panel2.ClientSize.Width / 2 - ucFactuur.Size.Width / 2, splitContainer1.Panel2.ClientSize.Height / 2 - ucFactuur.Size.Height / 2); ucFactuur.Anchor = AnchorStyles.None; splitContainer1.Panel2.Controls.Add(ucFactuur); 时它就在那里但是当我调整窗口大小时它不会停留在中间(它处于固定位置)。

No Scrollbar

我不确定如何解决这个问题,我也找不到任何其他方法来动态地集中我的用户控件。

谢谢, 托马斯

1 个答案:

答案 0 :(得分:2)

Anchoring.None在这种情况下不起作用,因为它只在没有滚动条时才有效。但是一旦你有了滚动条,你就不再希望控件居中了,你需要将它放在滚动值的位置。

换句话说,我认为你必须自己处理调整大小:

private void DoResize(object sender, EventArgs e) {
  splitContainer1.Panel2.AutoScrollMinSize = ucFactuur.Size;

  if (ucFactuur.Width < splitContainer1.Panel2.ClientSize.Width) {
    ucFactuur.Left = splitContainer1.Panel2.ClientSize.Width / 2 -
                     ucFactuur.Width / 2;
  } else {
    ucFactuur.Left = splitContainer1.Panel2.AutoScrollPosition.X;
  }

  if (ucFactuur.Height < splitContainer1.Panel2.ClientSize.Height) {
    ucFactuur.Top = splitContainer1.Panel2.ClientSize.Height / 2 -
                    ucFactuur.Height / 2;
  } else {
    ucFactuur.Top = splitContainer1.Panel2.AutoScrollPosition.Y;
  }
}

然后您的设置将更改为:

ucFactuur ucFactuur = new ucFactuur();
ucFactuur.AutoSize = true;
ucFactuur.Resize += DoResize;
splitContainer1.Panel2.Resize += DoResize;
splitContainer1.Panel2.AutoScroll = false;
splitContainer1.Panel2.Controls.Add(ucFactuur);