C# 在运行时添加UserControl时,如何将其定位在面板内部?

C# 在运行时添加UserControl时,如何将其定位在面板内部?,c#,winforms,layout,panel,C#,Winforms,Layout,Panel,我有一个对话框窗体,它混合了设计时和运行时添加的控件。每个控件都位于面板中。每个面板都有填充样式。顶部设置 在运行时,我将UserControl添加到面板: public NetworkDiscoveryDialog(CSNetworkDiscovery networkDiscovery) : this() { NetworkDiscovery = networkDiscovery; SnmpCommunitiesUserControl = new SnmpCommunities

我有一个对话框窗体,它混合了设计时和运行时添加的控件。每个控件都位于面板中。每个面板都有填充样式。顶部设置

在运行时,我将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;
    }
}
不幸的是,SNMPCommunities用户控件与设计时添加的控件的位置不同

我试过:

  • 设置面板的边距以及填充
  • 设置UserControl的边距和填充
  • 锚定和停靠设置
这些似乎对运行时添加的UserControl没有任何影响

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

我该怎么做呢

编辑:

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


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

如果要设置绝对位置,应将Location属性设置为您的位置,并将dock设置为none。
control.Location=新点(x,y)
control.Dock=DockStyle.None;

@KRAZE:这是一个基于Windows的应用程序。我的坏消息是,我不知道为什么我没有意识到我的大脑在看aspnet。。很抱歉..dock属性已设置为Fill。UserControl将由多个对话框使用。因此,我需要能够动态推断位置,以防止维护问题。我不想为每个对话框手动设置UserControl的Location属性。我的理解是,如果对话框无法调整大小,一组面板的功能应该与TableLayoutPanel的功能类似。这是错误的吗?您是正确的,但是控件树不是很容易填充的。控件的顺序对正确布局非常重要。请尝试通过“视图->其他窗口->文档大纲”调查表单设计器生成的表单布局。它会给你提供很多信息。