1

在我当前的项目中,当我将我的添加usercontrol到. 我设法使用以下代码将其添加到面板的中间:panelsplitcontainer

        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);

但是现在我的滚动条不见了,当我删除它时它就在那里,AnchorStyles.None但是当我调整窗口大小时它不会停留在中间(它处于固定位置)。

没有滚动条

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

谢谢,托马斯

4

1 回答 1

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);
于 2012-04-11T13:48:26.843 回答