如何在运行时添加Panel中的UserControl?

时间:2012-05-31 17:06:00

标签: c# winforms layout panel

我有一个对话框表单,其中混合了设计时和运行时添加的控件。这些控件中的每一个都在Panel中托管。每个面板都设置了FillStyle.Top。

在运行时,我将UserControl添加到面板:

public NetworkDiscoveryDialog(CSNetworkDiscovery networkDiscovery) : this()
{
    NetworkDiscovery = networkDiscovery;
    SnmpCommunitiesUserControl = new SnmpCommunitiesUserControl(NetworkDiscovery.SnmpCommunitiesSetting);
    panel2.Controls.Add(SnmpCommunitiesUserControl);
}

public partial class SnmpCommunitiesUserControl : UserControl
{
    public SnmpSetting SnmpSetting { get; set; }

    public SnmpCommunitiesUserControl()
    {
        InitializeComponent();
        Anchor = (AnchorStyles.Top | AnchorStyles.Left);
        Dock = DockStyle.Fill;
    }

    public SnmpCommunitiesUserControl(SnmpSetting snmpSetting)
        : this()
    {
        SnmpSetting = snmpSetting;
    }
}

不幸的是,SnmpCommunitiesUserControl与在设计时添加的控件的位置不同。

我试过了:

  • 设置Panel的边距以及填充。
  • 设置UserControl的边距以及填充。
  • 锚定和停靠设置。

这些似乎都没有对运行时添加的UserControl产生任何影响。

以前,我将'Location'参数传递给UserControl的构造函数。这允许我设置UserControl的位置,但不是可维护的解决方案。

我该怎么做呢?

编辑:

我目前的解决方案是在第一个面板内嵌套第二个面板。我清除了两个面板的所有边距和填充。父面板具有Dock.Top,其子节点具有Dock.Fill。然后,我将子项的左/右填充设置为10.这会使运行时添加的控件出现在正确的位置。不过,我对这个解决方案并不满意。

enter image description here

2 个答案:

答案 0 :(得分:1)

您应该自己设置位置和大小属性,或者您可以设置新控件的Dock属性。另一种方法是将主机面板更改为StackLayoutPanel或TableLayoutPanel。

答案 1 :(得分:1)

如果要设置绝对位置,则应将“位置”属性设置为您的位置,并将“停靠”设置为“无” control.Location = new Point(x, y);
control.Dock = DockStyle.None;