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 に答える